2014-04-01 43 views
0

我有一個包含480個元組的列表。如何遍歷python列表中的每六個元組

list = [(7,4), (6, 1), (4, 8)....] 

我需要把前六個元組,並把它們放在一個臨時變量來執行它們的一些評估。那麼我需要把下面的六個元組放在臨時變量中,然後進行相同的評估,然後再選擇下面的六個元組等等。

我不知道如何在循環中設置它 - 如何抓取六個元組,然後從列表中取下六個元組?還是有更簡單的方法來設置元組的數據結構來做到這一點?

+3

你可以使用['itertools grouper' recipe](https://docs.python.org/2/library/itertools.html#recipes) – jonrsharpe

+0

bah @jonrsharpe那是我的答案:P雖然固體:)這個問題一直出現,我喜歡這個食譜! –

回答

0
from itertools import izip_longest 
groups_of_six = izip_longest(*[iter(my_list_of_tuples)]*6) 
for a_group in groups_of_six: 
    do_some_processing_on(a_group) 

這就是我喜歡的方式來做到這一點:P

和自發電機你是不是循環遍歷...

+0

哇,這是討厭和美麗的同時。我不知道它是否「保證」能夠實現對Python的實現,因爲理論上'izip'可以一次獲取多個項目並緩存它們。但我想CPython的實現是這裏的參考。 –

-1

,你可以簡單地使用切片:

while l: 
    a,l=l[:6],l[6:] 
    doSomethingWith(a) 
+0

當然,但名單隻有480長,我認爲這是非常可讀的人(我認爲)新的python – fredtantini

+0

哦,我沒有看到長度限制。在這種情況下,這很好 –

1

這將返回一個列表的列表,每個子表由六個元組:

[my_list[i:i+6] for i in range(0, len(my_list), 6)] 

注意,如果你正在使用Python 2,你應該使用xrange而不是range,所以你不必連續迭代。

0

你可以考慮使用for循環來照顧它。

myList = [(7,4), (6, 1), (4, 8), (4, 9), (3, 4), (9, 2), (7, 3)] 
newList = [] 
for x in xrange(len(myList)): 
    if x % 6 == 0: 
     newList.append(myList[x]) 

print newList 

有一些簡短的方法可以做到這一點,但我認爲我的閱讀能力很好,很整潔。 你也可以更換任何東西newList.append線,你需要(例如某種功能)