索引错误:字符串索引超出范围(枚举)



好的,所以我不知道这里有什么问题。 我读过的所有内容基本上都解决了范围不结束,因此错误,但这对我来说没有意义,因为这是一个固定循环。

我只是想拿一个字符串,一次把每个字母扔进一个列表中。 我错过了什么?

>>> name = "Chris"
>>> 
>>> my_list = []
>>> 
>>> for key, value in enumerate(name):
...     my_list.append(value[key])
...     print (my_list)
...

我收到的错误:

['C']
Traceback (most recent call last):
 File "<pyshell#7>", line 2, in <module>
 my_list.append(value[key])
IndexError: string index out of range

你缺少的是value是一个单元素字符串。在仓位!= 0索引将导致IndexError;在第一次迭代期间,就会发生这种情况。

如果要使用 for 循环创建它,只需立即附加值:

for key, value in enumerate(name):
    my_list.append(value)

当然,这里绝不需要enumerate,这可以通过调用 list 并提供有问题的字符串来简化;然后,Python 将为您创建一个包含字符串内容的列表:

my_list = list(name)

对于Python 3.x,您还可以使用*list文字中解压缩:

my_list = [*name]

在所有提供的代码段中,操作的结果都根据需要['C', 'h', 'r', 'i', 's']

name = 'Chris'
my_list = list(name)
print(my_list)
输入: ["C", "h", "r", ">

i", "s"]

每次一个:

for letter in name:
print(letter)

您正在枚举一个字符串("Chris"(,这意味着键和值将在迭代期间保存以下值:

0  "C"
1  "h"
2  "r"
3  "i"
4  "s"

第一次迭代中的 value[key] 是可以的,它返回 'C'。

在第二次迭代中,索引 1 超出了字符串"h"的范围。

您可能想做的是:

for i, value in enumerate(name):
   my_list.append(value)
   print (my_list)

实现目标的另一种方法:

>>>name ="Chris"
>>>list(name)
['C', 'h', 'r', 'i', 's']

对于您的示例:在 python 中循环访问字符串时,不需要枚举。

>>>name = "Chris"
>>>my_list = []
>>>for i in name:
...  my_list.append(i)
>>>my_list
['C', 'h', 'r', 'i', 's']

代码中的my_list.append(value[key])更改为my_list.append(value)

最新更新