我有一个列表的列表:

lists = [[1,4,3,2,4], [4,5]]

我想变平该列表,并删除所有重复;或者,换句话说,应用一组联合动作:

desired_result = [1, 2, 3, 4, 5]

什么是最简单的方法是什么? (我被迫使用Python 2.4为这个项目)

有帮助吗?

解决方案

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(它的是很好的提你●如果你需要的版本一个A!= 2.6,目前生产的一个,顺便;-)并希望列表,而不是一组作为结果,我建议:

   import itertools

   ...

   return list(set(itertools.chain(*result_list)))

itertools 通常是一个伟大的方式工作迭代器(等与多种序列或集合),我衷心建议你熟悉它。 itertools.chain,尤其是记录 rel="noreferrer">这里。

我用下面做交叉点,这避免了对套的需要。

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 ]

您也可以按照此风格

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']    
desired_result = [x for y in lists for x in y]
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top