列表中的索引

时间:2011-11-19 16:11:55

标签: python

  

可能重复:
  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

问题在于它会将所有嵌套列表中的所有正确位置计在一起,但是我希望它计算每个嵌套列表中有多少正确的位置。 我该怎么办?

2 个答案:

答案 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]