比较python列表

比较python列表,python,Python,我试图比较一个列表和其他三个索引数相同的列表。 例如,我有这个列表 [A, B, C] 我用一个函数创建了另一个随机嵌套列表 例如: [[A ,B ,B], [C, B, A], [B, B, C]] 但是我想将每个嵌套列表与原始列表进行比较,看看每个嵌套列表中有多少个字符与原始列表中的相同 当我将原始列表中的每个索引与嵌套列表中的三个索引进行比较时,它就起作用了。我的老师说它很好,但对我来说它看起来很愚蠢,如果我有100个嵌套列表呢?必须有更好的方法来比较列表。 有人吗 您可以这样做:

我试图比较一个列表和其他三个索引数相同的列表。 例如,我有这个列表

 [A, B, C]
我用一个函数创建了另一个随机嵌套列表 例如:

 [[A ,B ,B], [C, B, A], [B, B, C]]
但是我想将每个嵌套列表与原始列表进行比较,看看每个嵌套列表中有多少个字符与原始列表中的相同 当我将原始列表中的每个索引与嵌套列表中的三个索引进行比较时,它就起作用了。我的老师说它很好,但对我来说它看起来很愚蠢,如果我有100个嵌套列表呢?必须有更好的方法来比较列表。
有人吗

您可以这样做:

from itertools import izip
def matches(input_lists, base_list):
    for l in input_lists:
        yield sum(1 for a, b in izip(l, base_list) if a==b)
结果如下:

>>> for i in matches([[1,2,3],[2,3,1],[0,2,0]], [1,2,4]):
    i


2
0
1
这和预期的一样

该函数是生成器函数,它比。另外,我们定义的
matches()
是生成器函数,所以在处理大型列表时问题应该会少一些


有帮助吗?它够干净吗?

嗯,如果你有更多的清单要检查,显然要花更长的时间。但这似乎是不可避免的-如果顺序(索引)真的很重要,我看不到任何方法可以显著加快速度(例如,集合是不可能的)…两个循环对我来说似乎很好,不管嵌套列表的数量有多少。我想你可以用
all()
来代替这个总和。另请参见
any()
。此外,您应该去掉方括号。有一个列表理解没有意义,只要把它变成一个生成器表达式。@delnan:我同意,我已经把它更新成生成器表达式了@科斯:我不明白,在这种情况下,您将如何使用
all()
?据我所知,应该返回匹配元素的数量,而不是是否所有元素都匹配。