Ответ 1
set.union
делает то, что вы хотите:
>>> results_list = [[1,2,3], [1,2,4]]
>>> results_union = set().union(*results_list)
>>> print results_union
set([1, 2, 3, 4])
Вы также можете сделать это с более чем двумя списками.
Выполнение обработки XML в python. (Edit: я вынужден использовать Python 2.4 для этого проекта, boo!) Я хочу знать, что такое самый Pythonic способ сделать это (создать объединение всех значений в нескольких списках):
def getUniqueAttributeValues(xml_attribute_nodes):
# split attribute values by whitespace into lists
result_lists=list(item.getContent().split() for item in xml_attribute_nodes)
# find all unique values
unique_results=[]
for result_list in result_lists:
for result in result_list:
if result in unique_results:
continue
unique_results.append(result)
return unique_results
set.union
делает то, что вы хотите:
>>> results_list = [[1,2,3], [1,2,4]]
>>> results_union = set().union(*results_list)
>>> print results_union
set([1, 2, 3, 4])
Вы также можете сделать это с более чем двумя списками.
Так как вы, кажется, используете Python 2.5 (он был бы хорошо упоминать в вашем Q, если вам нужен A для версий!= 2.6, текущий производственный, кстати;-) и в результате я хочу получить список, а не набор, я рекомендую:
import itertools
...
return list(set(itertools.chain(*result_list)))
itertools, как правило, отличный способ работать с итераторами (и, следовательно, с множеством последовательностей или коллекций), и я сердечно рекомендую вам познакомиться с ним. itertools.chain
, в частности, документируется здесь.
Союзы не поддерживаются списками, которые упорядочены, но поддерживаются наборами. Проверьте set.union.
Я использовал следующее, чтобы выполнить пересечения, что позволяет избежать необходимости в наборах.
a, b= [[1,2,3], [1,2]]
s = filter( lambda x: x in b, a)
или,
s = [ x for x in b if x in a ]
def getUniqueAttributeValues(xml_attribute_nodes):
return set(l
for item in xml_attribute_nodes
for l in item.getContent().split())
Если вы хотите иметь список, просто верните его в список перед возвратом.
Вы также можете следовать этому стилю
In [12]: a = ['Orange and Banana', 'Orange Banana']
In [13]: b = ['Grapes', 'Orange Banana']
In [14]: c = ['Foobanana', 'Orange and Banana']
In [20]: list(set(a) | set(b) | set(c))
Out[20]: ['Orange and Banana', 'Foobanana', 'Orange Banana', 'Grapes']
In [21]: list(set(a) & set(b) | set(c))
Out[21]: ['Orange and Banana', 'Foobanana', 'Orange Banana']