我有一个关于遍历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])
答案 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