python中的TypeError

时间:2017-09-27 17:11:30

标签: python python-2.x python-2.6

我正在尝试对我正在关注的其中一门课程提出挑战。我是编程新手,但我很想学习。 你能详细告诉我为什么会发生这个错误以及如何解决它。

default_names =['Justin', 'john','Emilee', 'jim','Ron','Sandra','veronica','Wiskley']
i=0
for i in default_names:
    default_names[i]=default_names[i][0].upper()
    i+=1
    if i==len(default_names):
        break

print default_names

错误: TypeError:列表索引必须是整数,而不是str

3 个答案:

答案 0 :(得分:0)

您正在寻找的是:

for i,s in enumerate(default_names):

或简单:

for i in range(len(default_names)):

您所犯的错误是当您说for i in default_names:i值是一个字符串而不是int正在尝试使用。

for i in default_names:
     print(i)

会给:

OUT: Justin
     john
     Emilee
     jim
     Ron
     Sandra
     veronica
     Wiskley

所以实际的代码应该是,假设你试图将列表中的每个字符串转换为大写:

for i in range(len(default_names)):
    default_names[i]=default_names[i].upper()

编辑: OP只希望First char为大写,并且由于string是不可变的,因此将代码更改为:

for i in range(len(default_names)): 
     default_names[i]=default_names[i][0].upper() + default_names[i][1:] 

答案 1 :(得分:0)

default_names =['Justin', 'john','Emilee', 'jim','Ron','Sandra','veronica','Wiskley']

for i in range(len(default_names)):
    default_names[i]=default_names[i].upper()

print default_names

答案 2 :(得分:0)

正如您在错误中看到的那样:TypeError:list indices必须是整数,而不是str。这是因为要访问列表的元素,您必须使用索引,它是一个整数。根据代码的结构,您可能来自不同的语言。 Python的for循环与其他语言不同。它不会增加您在循环上创建的变量,而是迭代元素并将值传递给变量。我认为将你的i初始化为0后,使用while循环与你所做的代码更合适。例如。

default_names =['Justin', 'john','Emilee', 'jim','Ron','Sandra','veronica','Wiskley']
i=0
while i < len(default_names):
    default_names[i]=default_names[i].upper() #removed the [0] here
    i+=1
    #removed the other codes here
print default_names

随着你在python中变得更好,你可以找到更有效的方法来做这些事情。您想要的结果可以通过

简单地完成
  

default_names = [name.upper() for name in default_names]

简单地迭代所有名称,使其成为大写并将其保存回default_names