loops - 在'for'循環中,python 訪問索引?

73 1

如何訪問索引本身,如下面的列表?


ints = [8, 23, 45, 12, 78]



當我使用 for 循環循環時,如何從 1到 5訪問循環索引?

时间: 原作者:

100 4

使用其他狀態變數( 如索引變數( 你通常在諸如C 或PHP這樣的語言中使用) ) 被認為是非python化的。

更好的選擇是使用內置函數 enumerate(),在 python 2和 3中都可用:


for idx, val in enumerate(ints):


 print(idx, val)



請查看 PEP 279,了解更多信息。

原作者:
129 5
如何使用for循環,在本例中,我如何訪問循環索引( 從 1到 5 )?

在迭代時使用 enumerate 獲取帶有元素的索引:


for index, item in enumerate(items):


 print(index, item)



並注意 python 的索引從零開始,因此你可以使用上述方法獲得 0到 4 如果要計數 1到 5,請執行以下操作:


for count, item in enumerate(items, start=1):


 print(count, item)



不確定控制流

你要求的是 Pythonic, 等效于以下內容這是大多數低級語言程序員使用的演算法:


index = 0 # Python's indexing starts at zero


for item in items: # Python's for loops are a"for each" loop 


 print(index, item)


 index += 1



或者在沒有每個循環的語言中:


index = 0


while index <len(items):


 print(index, items[index])


 index += 1



或者有時在Python中更常見(但是通常是單一的):


for index in range(len(items)):


 print(index, items[index])



使用枚舉函數

of python enumerate 函數通過隱藏索引的會計來減少視覺混亂,並將iterable封裝到另一個可迭代的( 一個 enumerate 對象) 中,該( 一個 enumerate 對象) 產生索引的兩項元組和原始iterable將提供的項, 這看起來像這樣:


for index, item in enumerate(items, start=0): # default is zero


 print(index, item)



這個代碼示例相當不錯規範示例 python 的慣用代碼和非代碼的代碼之間的差異 。 慣用代碼是複雜的( 但不複雜) python,以它的打算使用的方式編寫。 慣用代碼是語言的設計者所期望的這意味著通常這段代碼不僅更具可讀性,而且更高效 。

獲得計數

即使你不需要索引,但是你需要計算迭代次數( 有時想要) 你可以從 1 開始,最終的數字將是你的計數 。


for count, item in enumerate(items, start=1): # default is zero


 print(item)



print('there were {0} items printed'.format(count))



當你說你希望從1到5時,計數似乎更多是你想要的(而不是索引)。

分解它- 一步一步解釋

要打破這些例子說我們有一個我們想用索引迭代的項目列表


items = ['a', 'b', 'c', 'd', 'e']



現在我們通過這個iterable枚舉,創建一個枚舉對象:


enumerate_object = enumerate(items) # the enumerate object



我們可以從這個迭代中拉出第一個項目,我們將在 next 函數的循環中得到它


iteration = next(enumerate_object) # first iteration from enumerate


print(iteration)



我們看到第一個索引是 0 第一個是 'a' 元組:

 
(0, 'a')



 

我們可以使用稱為"序列解壓縮"的方法從這兩個元組中提取元素:


index, item = iteration


# 0, 'a' = (0, 'a') # essentially this.



當我們檢查 index 時,我們發現它是指第一個索引,0和 item 指的是第一項,'a'


>>> print(index)


0


>>> print(item)


a



結束語
  • python 索引從零開始
  • 若要在迭代時從iterable獲取這些索引,請使用枚舉函數
  • 在( 以及元組解包) 中使用枚舉方法可以創建更加可讀和可維護的代碼:

這樣做:


for index, item in enumerate(items, start=0): # Python indexes start at zero


 print(index, item)



原作者:
124 1

1 以外的 1 啟動它非常簡單:


for index, item in enumerate(iterable, start=1):


 print index, item



便箋

重要的提示,雖然有點誤導,因為 index 將是 tuple, 這樣做很好。

原作者:
127 3

就像 python 中的規範一樣,有幾種方法可以做到這一點。 在所有示例中,假定: lst = [1, 2, 3, 4, 5]

1.使用枚舉( 被認為是最常用的)


for index, element in enumerate(lst):


 # do the things that need doing here



在我看來這也是最安全的選擇,因為進入無限遞歸的機會已經被消除了。 item及其索引都保存在變數中,不需要編寫任何進一步的代碼來訪問項。

2.創建變數以保存索引( 使用 for )


for index in range(len(lst)): # or xrange


 # you will have to write extra code to get the element



3 。創建變數以保存索引( 使用 while )


index = 0


while index <len(lst):


 # you will have to write extra code to get the element


 index += 1 # escape infinite recursion



4.總是有另一種方法

如前所述,還有其他方法可以做到這一點,這裡沒有解釋,甚至可能在其他情況下會應用更多, 例如使用 itertools.chain。 它處理嵌套循環比其他示例更好。

原作者:
...