2014-04-01 42 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线,你需要(例如某种功能)