为了账号安全,请及时绑定邮箱和手机立即绑定

弄平序列序列的理解?

/ 猿问

弄平序列序列的理解?

SMILET 2019-11-19 15:40:08

如果我有序列的序列(可能是一个元组列表),则可以使用itertools.chain()进行展平。但是有时候我觉得我宁愿把它写成一种理解。我只是不知道该怎么做。这是一个很容易理解的情况:


假设我要交换序列中每对的元素。我在这里使用字符串作为序列:


>>> from itertools import chain

>>> seq = '012345'

>>> swapped_pairs = zip(seq[1::2], seq[::2])

>>> swapped_pairs

[('1', '0'), ('3', '2'), ('5', '4')]

>>> "".join(chain(*swapped_pairs))

'103254'

我在序列的偶数和奇数切片上使用zip来交换对。但是,我最终得到了一个元组列表,现在需要对其进行展平。所以我使用chain()。有什么办法可以代替我理解吗?


如果您想发布自己的解决交换元素对基本问题的解决方案,请继续,我将投票给所有教给我新知识的东西。但是,即使答案为“不,您不能”,我也只会将针对我的问题的答案标记为已接受。


查看完整描述

3 回答

?
UYOU

有理解力吗?好...


>>> seq = '012345'

>>> swapped_pairs = zip(seq[1::2], seq[::2])

>>> ''.join(item for pair in swapped_pairs for item in pair)

'103254'


查看完整回答
反对 2019-11-19
?
幕布斯6054654

您可以使用reduce达到您的目标:


In [6]: import operator

In [7]: a = [(1, 2), (2,3), (4,5)]

In [8]: reduce(operator.add, a, ())

Out[8]: (1, 2, 2, 3, 4, 5)

这将返回一个元组而不是一个列表,因为原始列表中的元素是被串联的元组。但是您可以轻松地从中建立一个列表,join方法也可以接受元组。


顺便说一句,列表理解不是正确的工具。基本上,列表理解通过描述此列表的元素外观来构建新列表。您希望将元素列表减少为一个值。


查看完整回答
反对 2019-11-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信