错误:弹出索引超出范围

时间:2018-08-11 07:25:43

标签: python python-3.6

这是我的代码:

word = str(input())
list = []

for i in range(len(word)):
    B = word[i]
    list.append(B)

D = list.pop(0)
E = D.upper()
list.insert(0, E)



capitalized_word = ""
for i in range(0, len(list)):
    C = list.pop(i)
    capitalized_word = capitalized_word + C


print(capitalized_word)

这是我得到的错误:

wORd
Traceback (most recent call last):
  File "/Users/akarsh/Desktop/python/capitalization.py", line 16, in <module>
    C = list.pop(i)
IndexError: pop index out of range

在这里,我正在使用0到3之间的值,该值在列表的索引范围内,但仍然出现此错误

3 个答案:

答案 0 :(得分:0)

您正在从列表中将前一个值从0弹出到3。弹出这些值后,列表将较小。

答案 1 :(得分:0)

这是因为list.pop修改了原始列表,而range(len(word))在循环开始时只计算了一次。

因此,您要求一种更好的方法。使用str.join()函数在列表中合并字符串。像这样:

capitalized_word = "".join(list)

答案 2 :(得分:0)

首先,不要调用您的变量list。这是Python的内置类型,将名称用于其他用途会引起您莫名其妙的问题。

首先,这个

word = str(input())
list = []

for i in range(len(word)):
    B = word[i]
    list.append(B)

是将字符串转换为列表的非常繁琐的方法。改为这样:

>>> word = "fred"
>>> mylist = list(word)
>>> mylist
['f', 'r', 'e', 'd']

要大写列表中的每个单词,请不要使用pop(),因为它会更改列表的长度,而表达式range(0, len(list))则假定该长度不变。无需从列表中提取字母即可建立capitalized_word

>>> capitalized_word = ""
>>> for c in mylist:
    capitalized_word += c
>>> capitalized_word
'fred'

您会注意到,实际上这不是大写字母,因为您的代码实际上并未升档。为此,

>>> capitalized_word = ""
>>> for c in mylist:
    capitalized_word += c.upper()
>>> capitalized_word
'FRED'

这向您展示了为什么您的方法不起作用,但这不是在Python中使用字符串的最佳方法。实际上,不要以这种方式这样做。改用内置功能:

>>> word = "fred"
>>> capitalized_word = word.upper()
>>> capitalized_word
'FRED'

类似地,不要这样做以提供初始资本:

D = list.pop(0)
E = D.upper()
list.insert(0, E)

相反,这样做:

>>> word = "fred"
>>> capitalized_word = word.title()
>>> capitalized_word
'Fred'