【问题标题】:Turn flat list into two-tuples [duplicate]将平面列表变成两个元组[重复]
【发布时间】:2013-01-31 21:35:06
【问题描述】:

是否有单行表达式来完成以下操作:

input = ['this', 'is', 'a', 'list']
output = [('this', 'is'), ('a', 'list')]

我最初的想法是创建两个列表,然后将它们压缩。这需要三行。

列表将包含偶数个元素。

【问题讨论】:

  • 如果你的列表有奇数个元素怎么办?
  • 你可以暂时忽略它。
  • 你原来的计划很好。我相信你可以把它敲成一条丑陋的线。

标签: python


【解决方案1】:
>>> input = ['this', 'is', 'a', 'list']

>>> [(input[i], input[i + 1]) for i in range(0, len(input), 2)]
[('this', 'is'), ('a', 'list')]

【讨论】:

    【解决方案2】:

    这很短:

    zip(input, input[1:])[::2]
    

    【讨论】:

    • 该问题已被标记为重复,但我还没有看到这个答案:) 我必须说我喜欢它...
    • 注意:在 python3 中不起作用。请参阅 root 对 python3 解决方案的回答。
    • 有趣,谢谢。
    • 尝试zip(input[::2], input[1::2]) for python3(受您的回答启发)
    • @NorthIsUp 很好,谢谢!
    【解决方案3】:
    In [4]: zip(*[iter(lst)]*2)
    Out[4]: [('this', 'is'), ('a', 'list')]
    

    【讨论】:

    • 这项工作是否有效,因为您两次提供 zip 相同的迭代器,因此在从“第一个列表”中获取第一项后,“第二个列表”中的第一项实际上是原始中的第二项列表?
    猜你喜欢
    • 1970-01-01
    • 2021-07-27
    • 2015-10-30
    • 2017-05-18
    • 2012-09-03
    • 1970-01-01
    • 2014-05-03
    • 2018-10-14
    • 1970-01-01
    相关资源
    最近更新 更多