我有一个包含480个元组的列表。如何遍历python列表中的每六个元组
list = [(7,4), (6, 1), (4, 8)....]
我需要把前六个元组,并把它们放在一个临时变量来执行它们的一些评估。那么我需要把下面的六个元组放在临时变量中,然后进行相同的评估,然后再选择下面的六个元组等等。
我不知道如何在循环中设置它 - 如何抓取六个元组,然后从列表中取下六个元组?还是有更简单的方法来设置元组的数据结构来做到这一点?
我有一个包含480个元组的列表。如何遍历python列表中的每六个元组
list = [(7,4), (6, 1), (4, 8)....]
我需要把前六个元组,并把它们放在一个临时变量来执行它们的一些评估。那么我需要把下面的六个元组放在临时变量中,然后进行相同的评估,然后再选择下面的六个元组等等。
我不知道如何在循环中设置它 - 如何抓取六个元组,然后从列表中取下六个元组?还是有更简单的方法来设置元组的数据结构来做到这一点?
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
和自发电机你是不是循环遍历...
哇,这是讨厌和美丽的同时。我不知道它是否“保证”能够实现对Python的实现,因为理论上'izip'可以一次获取多个项目并缓存它们。但我想CPython的实现是这里的参考。 –
,你可以简单地使用切片:
while l:
a,l=l[:6],l[6:]
doSomethingWith(a)
当然,但名单只有480长,我认为这是非常可读的人(我认为)新的python – fredtantini
哦,我没有看到长度限制。在这种情况下,这很好 –
这将返回一个列表的列表,每个子表由六个元组:
[my_list[i:i+6] for i in range(0, len(my_list), 6)]
注意,如果你正在使用Python 2,你应该使用xrange
而不是range
,所以你不必连续迭代。
你可以考虑使用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线,你需要(例如某种功能)
你可以使用['itertools grouper' recipe](https://docs.python.org/2/library/itertools.html#recipes) – jonrsharpe
bah @jonrsharpe那是我的答案:P虽然固体:)这个问题一直出现,我喜欢这个食谱! –