Python 查找出现在两个列表中的元素,在一个列表列表中

Python 查找出现在两个列表中的元素,在一个列表列表中,python,algorithm,list,set,Python,Algorithm,List,Set,我有一份清单: [[10, 9, 8], [8, 7], [1, 2, 3]] 子列表的大小不一定相同。 我需要找到一个出现在两个独立列表中的数字,并返回列表索引和这些列表中的数字索引 在本例中,它将是8,列表0,列表1,列表0 idx2,列表1 idx0 现在我用一堆for循环来做,但是速度太慢了。。。有没有更快、更像蟒蛇的方法来实现这一点 from itertools import combinations search = list(combinations(range(len(solu

我有一份清单:

[[10, 9, 8], [8, 7], [1, 2, 3]]
子列表的大小不一定相同。 我需要找到一个出现在两个独立列表中的数字,并返回列表索引和这些列表中的数字索引

在本例中,它将是8,列表0,列表1,列表0 idx2,列表1 idx0

现在我用一堆for循环来做,但是速度太慢了。。。有没有更快、更像蟒蛇的方法来实现这一点

from itertools import combinations
search = list(combinations(range(len(solutions)), 2))

for i in search:
    res = list(set(solutions[i[0]]) & set(solutions[i[1]]))
    if len(res) != 0:
        save = [i, res[0]]

idxList1 = solutions[save[0][0]].index(save[1])
idxList2 = solutions[save[0][1]].index(save[1])

这就是它应该做的,但这似乎是一个糟糕的解决方案。

您可以
枚举列表和列表中的项目,并将每个元素的索引元组存储在
dict
中,然后过滤出现两次以上的项目

lst = [[10, 9, 8], [8, 7], [1, 2, 3]]
in_list = collections.defaultdict(list)
for i, x in enumerate(lst):
    for k, y in enumerate(x):
        in_list[y].append((i, k))

res = {k: v for k, v in in_list.items() if len(v) > 1}
# {8: [(0, 2), (1, 0)]}
(这假设没有元素在同一子列表中出现多次。)


虽然这也使用了“一堆for循环”(取决于你对“一堆”的定义),但它只会访问嵌套列表中的每个元素一次,给它O(n)(n=comb.size of list)。

列表之间有多个公共值是什么<代码>[[10,9,8],[8,7,3],[1,2,3,9]]
你的问题很模糊,因此你可能无法得到想要的答案。请尝试为算法添加更明确的要求。准确地说是2?或者至少2个?只需匹配两个列表,然后理想情况下在匹配两个列表后终止多个公共元素即可,只需返回其中一个就可以占用大量内存