将平面列表变成两个元组[重复]
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 相同的迭代器,因此在从“第一个列表”中获取第一项后,“第二个列表”中的第一项实际上是原始中的第二项列表?以上是关于将平面列表变成两个元组[重复]的主要内容,如果未能解决你的问题,请参考以下文章