使用for循环遍历python中的列表

时间:2018-08-08 14:09:47

标签: python list for-loop iteration

我有一个关于遍历python中的列表的问题。 假设我有一个列表:row = ['1', '2', '3'],并且想要将其元素转换为整数,以便:row = [1, 2, 3]

我知道我可以通过列表理解来做到这一点:

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

或for循环:

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

我的问题与range(len(row))部分有关。有人可以用外行友好的方式回答,为什么我可以做这样的事情:

for i in row:
    print(i)

但是我不能这样做:

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

4 个答案:

答案 0 :(得分:3)

这样做的时候

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

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

但是索引必须是整数,并且我是一个字符串,所以会出现错误。


如果您这样做:

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

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

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


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


原因是:

  

range()基于0索引,这意味着列表索引从0开始,而不是1。   访问列表的第一个元素的语法是mylist [0]。   因此,range()生成的最后一个整数最大为,但不是   包括,停止。

答案 1 :(得分:2)

当您执行for i in row时,i将使用row中的值,即'1',然后是'2',然后是'3'

这些是字符串,不能作为列表索引使用。列表索引应为整数。在进行range(len(row))时,您将循环访问不超过列表大小的整数。

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

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

答案 2 :(得分:2)

这是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

答案 3 :(得分:2)

鉴于row = ['1', '2', '3'],行内的每个项目都是一个字符串,因此可以轻松打印:

for i in row:
    print(i)

但是,在第二个示例中,您尝试使用字符串访问行。您需要一个整数来访问列表中的值,而row是一个列表! (包含字符串,但仍为列表)。

for i in row:
    # row[i] = int(row[i])  -> this will throw an error
    row[int(i)] = int(row[int(i)]) # this will throw an error