Python 列表中的索引

Python 列表中的索引,python,Python,可能重复: 我有1份原始清单,例如: original = [1, 2, 3] 以及另一个具有嵌套列表(大小相同)的列表,例如: 我想计算每个嵌套列表中有多少索引与原始列表中的索引相同。 这是我写的: count= 0 for innerlist in (bigList): for indexes in (innerlist): for i in (original): if indexes == i: count= c

可能重复:

我有1份原始清单,例如:

original = [1, 2, 3]
以及另一个具有嵌套列表(大小相同)的列表,例如:

我想计算每个嵌套列表中有多少索引与原始列表中的索引相同。 这是我写的:

count= 0
for innerlist in (bigList):
    for indexes in (innerlist):
        for i in (original):
            if indexes == i:
            count= count+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
这和预期的一样

这是发电机的功能,哪个更好 解决方案比。另外,
matches()
我们定义的是生成器 函数,因此在处理大型 名单

有帮助吗?够干净吗

编辑:

如果无法导入任何内容,只需将
izip()替换为内置的
zip()


它现在是如何工作的?

这里有一个可行的解决方案:

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]

请停止反复发布相同的问题!获取列表中元素数量的最简单方法是使用
len(innerlist)
,而不是对它们进行计数。它到底是什么,不是有点复杂吗?@julio.alegria:我不这么认为,但我可能错了。请澄清。最初的问题是关于大列表的,因此是迭代器。我的解决方案只有3行(不包括import语句),使用迭代器实现健壮性,并且可以很好地重用,所以我倾向于认为它不太复杂。如果你给我另一种解决方案,我会回答。不过,你的解决方案并不能回答这个问题。它确实有效,但我无法导入任何内容。它应该比这更基本。我还认为你可以在不导入内容的情况下解决它,请检查我的解决方案below@user1040563:你第一次提到这个额外的要求。修复起来非常简单-只需使用标准的
zip()
函数,而不是更高级、更健壮的
izip()
。现在对你有用吗?你的解决方案计算嵌套列表中的所有匹配项,但OP说他已经这样做了,并准确地说:“……但我想计算每个嵌套列表中有多少个正确的位置”。你是对的,我不太明白答案,编辑!它仍然不起作用。如果我打印匹配项,它会显示:[1][1,2][1,2,3][1,2,3,0][1,2,3,0,1][1,2,3,0,1,1][1,2,3,0,1,1][1,2,3,0,1][1,2,3,0,1,0,1,2]而不是[3,1,1,1,1,2],您确定实现了它吗?(缩进和所有?)。这个代码只是为biglist的每个元素添加了
count
,结果是不可能的!是的,它的打印:“[1,2,3,0,1,1,0,1,2]”9个索引,每个嵌套列表3个索引,而不是每个列表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]