如何做多个列表的并集?

2024-03-28 23:15:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我读到:Combining two lists and removing duplicates, without removing duplicates in original list但我的需要超出了范围。我至少有30个名单,我需要没有所有名单的重复工会。现在,我的第一次尝试只是使用+将所有成员添加到一个伟大的列表中,然后使用set删除重复项,但我不确定这是否是最佳解决方案:

编辑-添加示例:

list_a = ['abc','bcd','dcb']
list_b = ['abc','xyz','ASD']
list_c = ['AZD','bxd','qwe']
big_list = list_a + list_b + list_c
print list(set(big_list)) # Prints ['abc', 'qwe', 'bcd', 'xyz', 'dcb', 'ASD', 'bxd']

我真正的问题是这是不是最好的组合方式?你知道吗


Tags: listduplicatesabcsettwobigremoving名单
3条回答

一种使用set.union的方法有already been mentioned,尽管在第一次将列表映射到set实例之后应用于每个列表。你知道吗

另一种选择是,可以省略显式的set映射,如set.union,与set.update(后一种方法在the accepted answer中介绍)非常类似,它还可以使用任意数量的可iterable参数,允许直接调用空集和提供的列表上的set.union。你知道吗

>>> list_a = ['abc','bcd','dcb']
>>> list_b = ['abc','xyz','ASD']
>>> list_c = ['AZD','bxd','qwe']

>>> result = set().union(list_a, list_b, list_c)
>>> result
{'ASD', 'xyz', 'qwe', 'bxd', 'AZD', 'bcd', 'dcb', 'abc'}

如果我正确地理解了您要做的事情,那么就可以对任意数量的iterable参数使用set.update方法。你知道吗

>>> lists = [[1,2,3], [3,4,5], [5,6,7]]
>>> result = set()
>>> result.update(*lists)
>>> 
>>> result
{1, 2, 3, 4, 5, 6, 7}

编辑:使用示例数据:

>>> list_a = ['abc','bcd','dcb']
>>> list_b = ['abc','xyz','ASD']
>>> list_c = ['AZD','bxd','qwe']
>>> 
>>> result = set()
>>> result.update(list_a, list_b, list_c)
>>> result
{'ASD', 'xyz', 'qwe', 'bxd', 'AZD', 'bcd', 'dcb', 'abc'}

使用set.union(set1, set2, set3, ..)。你知道吗

>>> l1 = [1,2,3]
>>> l2 = [2,3,4]
>>> l3 = [3,4,5]
>>> set.union(*[set(x) for x in (l1, l2, l3)])
{1, 2, 3, 4, 5}

更紧凑(适用于Py2和Py3,谢谢@Lynn!)地址:

>>> set.union(*map(set, (l1, l2, l3)))
set([1, 2, 3, 4, 5])

相关问题 更多 >