将平面列表变成两个元组[重复]

Posted

技术标签:

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

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

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

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

列表将包含偶数个元素。

【问题讨论】:

如果你的列表有奇数个元素怎么办? 你可以暂时忽略它。 你原来的计划很好。我相信你可以把它敲成一条丑陋的线。 【参考方案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 相同的迭代器,因此在从“第一个列表”中获取第一项后,“第二个列表”中的第一项实际上是原始中的第二项列表?

以上是关于将平面列表变成两个元组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

拆分两个元素的元组并添加到熊猫数据框[重复]

Haskell-将两个列表放入一个元组列表中

如何将元组列表解压缩到单个列表中? [复制]

根据元组的值对元组列表中的重复元组进行平均

集合的基本操作

如何按行压缩两个元组列表?