如果我有序列的序列(可能是一個(gè)元組列表),則可以使用itertools.chain()進(jìn)行展平。但是有時(shí)候我覺得我寧愿把它寫成一種理解。我只是不知道該怎么做。這是一個(gè)很容易理解的情況:假設(shè)我要交換序列中每對(duì)的元素。我在這里使用字符串作為序列:>>> 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'我在序列的偶數(shù)和奇數(shù)切片上使用zip來交換對(duì)。但是,我最終得到了一個(gè)元組列表,現(xiàn)在需要對(duì)其進(jìn)行展平。所以我使用chain()。有什么辦法可以代替我理解嗎?如果您想發(fā)布自己的解決交換元素對(duì)基本問題的解決方案,請(qǐng)繼續(xù),我將投票給所有教給我新知識(shí)的東西。但是,即使答案為“不,您不能”,我也只會(huì)將針對(duì)我的問題的答案標(biāo)記為已接受。
3 回答

UYOU
TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
有理解力嗎?好...
>>> seq = '012345'
>>> swapped_pairs = zip(seq[1::2], seq[::2])
>>> ''.join(item for pair in swapped_pairs for item in pair)
'103254'

幕布斯6054654
TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以使用reduce達(dá)到您的目標(biāo):
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)
這將返回一個(gè)元組而不是一個(gè)列表,因?yàn)樵剂斜碇械脑厥潜淮?lián)的元組。但是您可以輕松地從中建立一個(gè)列表,join方法也可以接受元組。
順便說一句,列表理解不是正確的工具?;旧?,列表理解通過描述此列表的元素外觀來構(gòu)建新列表。您希望將元素列表減少為一個(gè)值。
添加回答
舉報(bào)
0/150
提交
取消