2017-02-23 81 views
1

Может быть, я overthinking, но я не могу придумать способ объединить списки в пути мне нужноPython: Объединение списков

[1,2,3,4,5] 
['A','E','I','I','U'] 

Привести в

[[1,'A'],[2,'E'],[3,'I'],[4,'O'],[5,'U']] 

Если я совмещаю их, я получаю кортежей/скругленные скобки

ответ

0

Это то, что zip для

list_a = [1,2,3,4,5] 
list_b = ['A','E','I','I','U'] 

list_res = zip(list_a, list_b)  # Python 2.7 
list_res = list(zip(list_a, list_b)) # Python 3 onward 

Если вы действительно хотите, внутренние контейнеров быть кортежами, то вы можете использовать map как @khelwood предлагаемого или список-понимание, или явный цикл, или ...

list_of_lists = map(list, list_res)  # Python 2.7 
list_of_lists = list(map(list, list_res)) # Python 3 onward 

Примечания подобного поведение map и zip на двух версиях Python. На python 2 они вернули списки, тогда как на Python 3 они возвращают итераторы.

+2

Но вы получите кортежи , который OP не хочет. –

3

Если вам действительно нужен список списков, вы должны сделать следующее:

>>> a = [1, 2, 3, 4, 5] 
>>> b = ['a', 'b', 'c', 'd', 'e'] 
>>> result = [list(zipped) for zipped in zip(a, b)] 
>>> result 
[[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd'], [5, 'e']] 
4

Вы можете использовать zip.

Если вы хотите внутренние списки вместо внутренних кортежей, возможно, также используйте map.

map(list, zip(list_1, list_2)) 

Это будет применять функцию list для каждого кортежа в застежку списке, давая вам список списков.

(Вопрос задает Python 2.7, но в Python 3, map не возвращает список, так что вы также должны применить функцию list к результату карты, т.е. list(map(...)))

+0

Я думаю, что это более Pythonic, чем мой ответ. – leovp

+0

@leovp Нет, я считаю, что перечни понятий обычно считаются очень путинским способом делать что-то. – khelwood