【问题标题】:The TypeError in pythonpython中的TypeError
【发布时间】:2018-03-09 06:44:55
【问题描述】:

我正在尝试挑战我正在学习的一门课程。我是编程新手,但我渴望学习。 你能详细告诉我为什么会出现这个错误以及如何解决它。

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: list indices must be integers, not str

【问题讨论】:

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


【解决方案1】:
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】:

    您正在寻找的是:

    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:] 
    

    【讨论】:

    • 实际上尝试将每个名称的第一个字母作为大写。顺便说一句,谢谢你的回答
    • 只需将default_names[i] 更改为default_names[i][0]。当然,很高兴为您提供帮助。
    • 感谢您的帮助,如果问题很愚蠢,我很抱歉我正在努力学习和提高自己。
    • 很好@Dallasboy,每个人都必须从某个地方开始。不过有一个建议:在您选择在 SO 中提问之前,请尝试谷歌搜索您的问题。如果我们没有从 OP 方面看到足够的工作,这里的社区很有帮助,但也有点吝啬。​​
    【解决方案3】:

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

    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

    【讨论】:

      猜你喜欢
      • 2013-03-18
      • 1970-01-01
      • 2019-04-03
      • 2018-06-28
      • 2015-04-25
      • 2018-07-28
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      相关资源
      最近更新 更多