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

Я хочу, чтобы эти сливались список вместе два элемента, как это:Как объединить списки на два вместе?

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

Пожалуйста, помогите мне. Я не знаю, как это сделать.

Спасибо

+0

возможно дубликат [Альтернативный способ разделить список на группы of n] (http://stackoverflow.com/questions/1624883/alternative-way-to-split-a-list-into-groups-of-n) – sshashank124

ответ

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: list index out the range». item '- 0-> len (S) -1, поэтому он должен быть: range (0, len (s) -1, 2) или s [0 :: 2]/s [0 :: 1], как в других ответах. – user3378649

+0

@ user3378649 В OP не указывалось, как обрабатывать списки нечетной длины. В этом случае ваше предложение не может быть желательным. – CoryKramer

2

Вы можете использовать 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']] 
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

Смежные вопросы