2010-06-17 124 views
5

在Python中,當你有一個元組列表時,你可以迭代它們。例如,當您有3d點時:我該如何迭代一個元組的第一個變量

for x,y,z in points: 
    pass 
    # do something with x y or z 

如果您只想使用第一個變量或第一個和第三個變量,該怎麼辦? Python中是否有跳過符號?

回答

8

阻止你不接觸你不感興趣的變量嗎?在Python中有一個常用的下劃線來表示你不感興趣的變量。例如:

for x, _,_ in points: 
    print(x) 

您需要明白,這只是一個慣例,並且對性能沒有影響。

+1

這是一個例子。通常我可以在一個元組中有4個變量,並且我懶得爲它們創建好的新變量名稱。 – 2010-06-17 11:55:20

+2

@Peter:你不必使用*好的*名稱作爲你不想使用的變量。 – SilentGhost 2010-06-17 11:57:49

+1

事實上'_'可能是你可能想出的最不具描述性的變量名稱;-)或者它會是,如果不是這個約定的話。 – 2010-06-17 12:23:16

7

是,下劃線:

>>> a=(1,2,3,4) 
>>> b,_,_,c = a 
>>> b,c 
(1, 4) 

這不正是 '跳過',只是一個約定。下劃線變量仍然得到賦值:

>>> _ 
3 
+0

有關'_'的信息很有趣。所以'a,a,a =(1,2,3)'實際上有效...... – Dario 2010-06-17 14:10:31

+0

@Dario我不會推薦這麼做,因爲很難閱讀和理解你期望在 – unbeli 2010-06-17 15:15:18

+0

中期望的值是的,我不會因爲這個原因而使用它,但是我認爲Python會因此而拒絕它。 – Dario 2010-06-17 19:19:35

5

一種常見的方式做,這是使用下劃線爲未使用的變量:

for x, _, z in points: 
    # use x and z 

這實際上並沒有做任何事情,從你寫什麼不同。下劃線是一個正常的變量,就像任何其他的一樣。但是這顯示了人們閱讀你的代碼,你不打算使用這個變量。

不建議在交互式提示中這樣做,因爲_在那裏有一個特殊含義:最後一個運行語句/表達式的值。

3

雖然這不是一樣光滑如你要求,這也許是最清晰爲你的只有你所關心的元組指標給予有意義的名字,意圖:

for each in points: 
    x = each[0] 
    # do something with x 
0

在Python 3.1,你可以在元組賦值左側的標識符前面使用星號,它會吸收剩下的任何東西。該構造將處理可變數量的元組項目。就像這樣:

>>> tpl = 1,2,3,4,5 
>>> a, *b = tpl 
>>> a 
1 
>>> b 
>>> (2, 3, 4, 5) 

或以不同的順序和組合:

>>> a, *b, c = tpl 
>>> a 
1 
>>> b 
(2, 3, 4) 
>>> c 
5 

所以,你問了一下,在這裏你只在第一個項目感興趣,可以使用的情況下* _大吃起來並丟棄您不關心的剩餘物品:

>>> a, *_ = tpl 
>>> a 
1 
相關問題