【问题标题】:Iterate over list taking three items at a time [duplicate]迭代列表一次取三个项目[重复]
【发布时间】:2013-08-26 07:33:34
【问题描述】:

如果我有一个列表:

["A","Bb","C","D","E","F","G"]

我怎样才能迭代它,以便我可以输出以下内容:

"A Bb C"
"D E F"
"G"

【问题讨论】:

  • "C" 应该输出两次?
  • @Haidro "G"over(ite)rated..
  • 什么是逻辑?
  • @Haidro 抱歉,我已经解决了我的问题

标签: python


【解决方案1】:

是我一直在闲逛的食谱。

def chunks(l, n):
    for i in xrange(0, len(l), n):
        yield l[i:i+n]

【讨论】:

  • 目前为止我最喜欢这个,但是有什么方法可以使用 itertools 函数吗?
  • 不是直接的。这可能是对 itertools 的一个很好的补充。
  • @NoelEvans 刚刚加了一个:)
【解决方案2】:

获取[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']

【讨论】:

    【解决方案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  
    

    【讨论】:

    • 看起来比简单写更“神奇”
    • @Haidro 不错。谢谢。
    • 问题是最后一项是('G', '', '')并产生'G '
    • @newtover 如果这是一个问题,你可以在最后打电话给strip() :)
    猜你喜欢
    • 2020-05-02
    • 2011-03-25
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2012-07-10
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多