Skip to main content
 首页 » 编程设计

python之列表索引必须是整数,而不是 str

2025年05月04日13kevingrace

我有两种类型的列表:姓名和分数,我正在尝试合并这些分数,以便将所有分数合并到一个现有列表中

我一直收到“列表索引必须是整数,而不是 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)。

  • 字符串周围有引号。不要将字符串与变量名称混淆。