Python 检查所有子列表中存在哪些项

Python 检查所有子列表中存在哪些项,python,list,Python,List,我想收集每个子列表中存在的所有项目。 假设列表列表如下所示: list[0] = ['A', 'B', 'C', 'D'] list[1] = ['X', 'B', 'A'] list[2] = ['R', 'C', 'A', 'B', 'X'] “A”和“B”存在于每个子列表中,我的目标是将它们保存到另一个列表中: list2 = ['A', 'B'] 我一直在尝试使用列表理解,但我不知道如何让它以我想要的方式工作。非常感谢您的帮助 试试这个: >>> list1 = [

我想收集每个子列表中存在的所有项目。 假设列表列表如下所示:

list[0] = ['A', 'B', 'C', 'D']
list[1] = ['X', 'B', 'A']
list[2] = ['R', 'C', 'A', 'B', 'X']
“A”和“B”存在于每个子列表中,我的目标是将它们保存到另一个列表中:

list2 = ['A', 'B']
我一直在尝试使用列表理解,但我不知道如何让它以我想要的方式工作。非常感谢您的帮助

试试这个:

>>> list1 = [['A', 'B', 'C', 'D'], ['X', 'B', 'A'], ['R', 'C', 'A', 'B', 'X']]
>>> list2 = list(set(list1[0]).intersection(list1[1]).intersection(list1[2]))
>>> list2
['A', 'B']
试试这个:

>>> list1 = [['A', 'B', 'C', 'D'], ['X', 'B', 'A'], ['R', 'C', 'A', 'B', 'X']]
>>> list2 = list(set(list1[0]).intersection(list1[1]).intersection(list1[2]))
>>> list2
['A', 'B']

使用“设置交点”,然后将结果转换回列表

your_list = [
    ['A', 'B', 'C', 'D'],
    ['X', 'B', 'A'],
    ['R', 'C', 'A', 'B', 'X']
]

print(set.intersection(*map(set,your_list)))
如果您首先知道每个列表的值是唯一的,并且不关心顺序,那么您可以在原始代码中使用集合列表,因此这将简化为:

your_list = [
    set(['A', 'B', 'C', 'D']),
    set(['X', 'B', 'A']),
    set(['R', 'C', 'A', 'B', 'X'])
]

print(set.intersection(*your_list))

注意:不要调用自己的变量
list
,因为它与内置的列表类型冲突,并且会变得非常混乱。

使用设置交点,然后将结果转换回列表

your_list = [
    ['A', 'B', 'C', 'D'],
    ['X', 'B', 'A'],
    ['R', 'C', 'A', 'B', 'X']
]

print(set.intersection(*map(set,your_list)))
如果您首先知道每个列表的值是唯一的,并且不关心顺序,那么您可以在原始代码中使用集合列表,因此这将简化为:

your_list = [
    set(['A', 'B', 'C', 'D']),
    set(['X', 'B', 'A']),
    set(['R', 'C', 'A', 'B', 'X'])
]

print(set.intersection(*your_list))

注意:不要调用您自己的变量
list
,因为它与内置的列表类型冲突,并且会变得非常混乱。

如果顺序不重要,您可以使用
set.intersection

l = [['A', 'B', 'C', 'D'],
     ['X', 'B', 'A'],
     ['R', 'C', 'A', 'B', 'X']]

list2 = list(set.intersection(*(set(sl) for sl in l)))

print(list2)
输出:

['A', 'B']
#  or ['B', 'A']

如果顺序不重要,您可以使用
set.intersection

l = [['A', 'B', 'C', 'D'],
     ['X', 'B', 'A'],
     ['R', 'C', 'A', 'B', 'X']]

list2 = list(set.intersection(*(set(sl) for sl in l)))

print(list2)
输出:

['A', 'B']
#  or ['B', 'A']

这是完美的,因为它允许动态数量的子列表!非常感谢。这是完美的,因为它允许动态数量的子列表!多谢各位。