s=[['aaa'], ['bbb'], ['ccc'], ['ddd']]
我想用兩個元素,像這樣一起合併這些列表:如何將兩個列表合併在一起?
[['aaa','bbb'],['ccc','ddd']]
請幫助我。我現在不怎麼做這個。
謝謝
s=[['aaa'], ['bbb'], ['ccc'], ['ddd']]
我想用兩個元素,像這樣一起合併這些列表:如何將兩個列表合併在一起?
[['aaa','bbb'],['ccc','ddd']]
請幫助我。我現在不怎麼做這個。
謝謝
可以使用range
函數的語法是range(start, stop, step)
。如果您一次執行2個元素,則可以使用列表理解來追加這些子列表對。
>>> [s[i] + s[i+1] for i in range(0, len(s), 2)]
[['aaa', 'bbb'], ['ccc', 'ddd']]
你會遇到這個解決方案的一個小問題。如果S的長度是奇數,則會出現問題'IndexError:列表索引超出範圍'。項的索引是0-> len(S)-1,所以它應該是:range(0,len(s)-1,2)或s [0 :: 2]/s [0 :: 1]指出了其他答案。 – user3378649 2014-11-08 13:57:59
@ user3378649 OP沒有指定如何處理奇數長度的列表。在這種情況下,您的建議可能不是理想的行爲。 – CoryKramer 2014-11-08 14:01:10
您可以使用map
與lambda
s=[['aaa'], ['bbb'], ['ccc'], ['ddd']]
res= map(lambda i:s[i]+s[i+1], range(0, len(s)-1, 2))
print res
輸出:
[['aaa', 'bbb'], ['ccc', 'ddd']]
這是一個很好的方式做到這一點:
s_even = s[0::2]
s_odd = s[1::2]
merged = zip(s_even,s_odd)
或短的版本:
merged = zip(s[0::2], s[1::2])
讓你的確切格式(列表,而不是元組,使用平面列表):
# flatten list (NOTE: there are *way* more efficient ways)
s = sum(s, [])
# merge using same concept as above
merged = map(list, zip(s[0::2], s[1::2]))
In [1]: s=[['aaa'], ['bbb'], ['ccc'], ['ddd']]
In [2]: [ [ s[i*2][0], s[i*2 + 1][0] ] for i in range(len(s)/2) ]
Out[2]: [['aaa', 'bbb'], ['ccc', 'ddd']]
In [3]:
的[替代方式可能重複分裂名單成團(http://stackoverflow.com/questions/1624883/alternative-way-to-split-a-list-int-groups-of-n) – sshashank124 2014-11-08 20:32:26