簡體   English   中英

使用for循環遍歷python中的列表

[英]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 rowi所采用的值的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM