迭代列表,每次取三个项目。

6
如果我有一个列表包含以下内容:
["A","Bb","C","D","E","F","G"]

如何迭代它,以便输出以下内容:
"A Bb C"
"D E F"
"G"

1
"C" 应该输出两次? - falsetru
@Haidro,“G”被高估了。 - halirutan
那么逻辑是什么? - devnull
@Haidro 抱歉,我已经修复了我的问题。 - Baz
3个回答

6

获取[0:3][3:6][6:9]等子列表...

>>> xs = ["A","Bb","C","D","E","F","G"]
>>> [' '.join(xs[i:i+3]) for i in range(0, len(xs), 3)]
['A Bb C', 'D E F', 'G']

6
我常常保留的一份菜谱。
def chunks(l, n):
    for i in xrange(0, len(l), n):
        yield l[i:i+n]

到目前为止,这是我最喜欢的方法,但有没有办法使用itertools函数呢? - Noel Evans
1
不是直接的。这可能是itertools的一个不错的补充。 - Jakob Bowyer
@NoelEvans 刚刚添加了一个 :) - TerryA

3
你可以在这里使用 itertools.izip_longest
>>> from itertools import izip_longest
>>> L = ["A","Bb","C","D","E","F","G"]
>>> for item in izip_longest(*[iter(L)]*3, fillvalue=''):
...     print ' '.join(item)
... 
A Bb C
D E F
G  

看起来比简单地编写更“神奇”。 - Jakob Bowyer
问题在于最后一个项目是 ('G', '', ''),并且会产生 'G ' - newtover
如果这是个问题,你总可以在末尾调用 strip() :) - TerryA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接