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]