使用forloop在python中迭代列表

2024-09-27 04:26:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于在python中迭代列表的问题。 假设我有一个列表:row = ['1', '2', '3'],并希望将其元素转换为整数,这样:row = [1, 2, 3]

我知道我可以通过列表理解做到:

row = [int(i) for i in row]

或用于循环:

for i in range(len(row)):
    row[i] = int(row[i])

我的问题涉及{}部分。有没有人能用外行友好的方式回答我,为什么我可以这样做:

for i in row:
    print(i)

但我不能这么做:

for i in row:
    row[i] = int(row[i])

Tags: in元素列表forlen方式range整数
3条回答

执行for i in row时,i获取row中的值,即'1',然后'2',然后'3'

这些是字符串,作为列表索引无效。列表索引应为整数。在执行range(len(row))时,循环整数,直到列表的大小

顺便说一下,更好的方法是:

for elt_id, elt in enumerate(list):
    # do stuff

当你这样做的时候

for i in row:
    row[i] = int(row[int(i)]) 

i是数组row中的元素。因此,i将是'1'然后是'2'然后是'3'

但是索引必须是整数,i是字符串,所以会出现错误


如果您这样做:

for i in row:
    row[int(i)] = int(row[i]) 

这仍然是一个错误,因为i是数组row中元素的整数。因此,我将是1,然后是2,然后是3

但是row[3]将导致IndexError,因为列表中只有3个元素,编号从0开始


而在另一种情况下(第一种情况),i变为0,然后变为1,然后变为2,这不会导致错误,因为行[2]是有效的


原因是:

range() is 0-index based, meaning list indexes start at 0, not 1. eg. The syntax to access the first element of a list is mylist[0] . Therefore the last integer generated by range() is up to, but not including, stop .

下面是来自IDLE的一个示例:

>>> row = ['1', '2', '3']
>>> for i in row:
    row[i] = int(row[i])

Traceback (most recent call last):
  File "<pyshell#3>", line 2, in <module>
    row[i] = int(row[i])
TypeError: list indices must be integers or slices, not str

迭代的项不是整数,不能用作列表的索引

以下内容将在一段时间内起作用,但最后会抛出一个IndexError

for i in row:
    i2 = int(i)
    row[i2] = i2

相关问题 更多 >

    热门问题