[英]Parallel Python for-loop iterating over list of function arguments
[英]Iterating over a list in python using for-loop
我有一個關於在 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])
當你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 這不會導致錯誤,因為 row[2] 是有效的。
原因是 :
range() 是基於 0 索引的,這意味着列表索引從 0 開始,而不是 1。例如。 訪問列表第一個元素的語法是 mylist[0] 。 因此 range() 生成的最后一個整數最多但不包括 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
給定row = ['1', '2', '3']
, row 內的每一項都是一個字符串,因此可以很容易地打印出來:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.