2014-11-08 93 views
0
s=[['aaa'], ['bbb'], ['ccc'], ['ddd']] 

我想用两个元素,像这样一起合并这些列表:如何将两个列表合并在一起?

[['aaa','bbb'],['ccc','ddd']] 

请帮助我。我现在不怎么做这个。

谢谢

+0

的[替代方式可能重复分裂名单成团(http://stackoverflow.com/questions/1624883/alternative-way-to-split-a-list-int-groups-of-n) – sshashank124 2014-11-08 20:32:26

回答

1

可以使用range函数的语法是range(start, stop, step)。如果您一次执行2个元素,则可以使用列表理解来追加这些子列表对。

>>> [s[i] + s[i+1] for i in range(0, len(s), 2)] 
[['aaa', 'bbb'], ['ccc', 'ddd']] 
+0

你会遇到这个解决方案的一个小问题。如果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

+0

@ user3378649 OP没有指定如何处理奇数长度的列表。在这种情况下,您的建议可能不是理想的行为。 – CoryKramer 2014-11-08 14:01:10

2

您可以使用maplambda

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']] 
3

这是一个很好的方式做到这一点:

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])) 
0
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]: 

检查Python List Comprehension