可能重复:
comparing lists python
我有1个原始列表,例如:
original = [1, 2, 3]
和另一个包含嵌套列表(大小相同)的列表,例如:
bigList = [[1, 2, 3], [2, 2, 2], [3, 2, 3]...]
我希望计算每个嵌套列表中的索引数与原始列表中的索引数相同。 这就是我写的:
count= 0
for innerlist in (bigList):
for indexes in (innerlist):
for i in (original):
if indexes == i:
count= count+1
问题在于它会将所有嵌套列表中的所有正确位置计在一起,但是我希望它计算每个嵌套列表中有多少正确的位置。 我该怎么办?
答案 0 :(得分:1)
你过去曾问过这个问题,我的答案如下:
你可以这样做:
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
按预期工作。
izip()
function是生成器函数,这更好
解决方案比zip()
。我们定义的matches()
也是生成器
功能,所以处理大时应该有更少的问题
列表。
有帮助吗?它足够干净吗?
修改强>
如果无法导入,只需将izip()
替换为内置zip()
:
def matches(input_lists, base_list):
for l in input_lists:
yield sum(1 for a, b in zip(l, base_list) if a==b)
它现在如何运作?
答案 1 :(得分:1)
这是一个可能的解决方案:
matches = []
for mylist in bigList:
count = 0
for i in range(0, len(mylist)):
count += int(mylist[i] == original[i])
matches.append(count)
编辑:在我的计算机上完美运行:
>>> original = [1, 2, 3]
>>> bigList = [[1, 2, 3], [2, 2, 2], [3, 2, 3]]
>>> matches = []
>>> for mylist in bigList:
... count = 0
... for i in range(0, len(mylist)):
... count += int(mylist[i] == original[i])
... matches.append(count)
...
>>> matches
[3, 1, 2]