弄平序列序列的理解?

如果我有序列的序列(可能是一个元组列表),则可以使用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()。有什么办法可以代替我理解吗?


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


SMILET
浏览 445回答 3
3回答

UYOU

有理解力吗?好...>>> seq = '012345'>>> swapped_pairs = zip(seq[1::2], seq[::2])>>> ''.join(item for pair in swapped_pairs for item in pair)'103254'

幕布斯6054654

您可以使用reduce达到您的目标:In [6]: import operatorIn [7]: a = [(1, 2), (2,3), (4,5)]In [8]: reduce(operator.add, a, ())Out[8]: (1, 2, 2, 3, 4, 5)这将返回一个元组而不是一个列表,因为原始列表中的元素是被串联的元组。但是您可以轻松地从中建立一个列表,join方法也可以接受元组。顺便说一句,列表理解不是正确的工具。基本上,列表理解通过描述此列表的元素外观来构建新列表。您希望将元素列表减少为一个值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python