我有两种类型的列表:姓名和分数,我正在尝试合并这些分数,以便将所有分数合并到一个现有列表中
我一直收到“列表索引必须是整数,而不是 str”错误
name1= [jim, bob, john, smith]
score1= [4,7,3,11]
name2= [bob, cahterine, jim, will, lucy]
score2= [6,12,7,1,4]
我想要的结果是:
name1 = [jim, bob, john, smith, catherine, will, lucy]
score2 = [11, 13 ,3 ,11 ,12 ,1 ,4]
def merge(name1,score1, name2,score2):
for i in name2:
if i in name1:
indexed= name1.index(i)
score2[i] =score1[int(indexed)]+score2[i]
if i not in name1:
name1.append(i)
score1.append(score2[(name1.index(i))])
请您参考如下方法:
您的分数在概念上与名称相关联。这告诉您您使用了错误的数据结构。特别是,数字代表您要加起来的分数,或者更重要的是,计数。
Python 有一个用于此的内置工具。
from collections import Counter
results_1 = Counter(jim = 4, bob = 7, john = 3, smith = 11)
results_2 = Counter(bob = 6, catherine = 12, jim = 7, will = 1, lucy = 4)
results_1 + results_2 # yes, it's really this easy.
至于你的错误信息,它的意思就是它所说的,@BryanOakley 已经解释得很透彻了。但我需要指出的是,在编程中,您必须精确、一致,并不断关注细节。良好的习惯可以避免这些错误,因为您会不断思考自己在做什么以及它到底意味着什么。样式约定也有帮助:
以迭代器实际包含的内容命名您的迭代器。因为在 Python 中,遍历列表实际上会为您提供列表中的项(不是整数索引),所以使用一个暗示实际列表项的名称,而不是像
i这样平淡无奇的名称。 .用复数名称命名您的列表和其他容器,以便您的代码自然地描述正在发生的事情。因此,写类似
for name in names:的东西.
但我提到“注重细节”是因为
当你发布你的代码时,不要把它打出来;复制并粘贴,以便我们可以准确查看您拥有的内容。
拼写很重要。打字错误(
cahterine)。字符串周围有引号。不要将字符串与变量名称混淆。
