Объединение двух списков в кортежи в python
Я хочу использовать функцию соединения в python (не любую другую функцию) для объединения двух списков во вложенные списки, предполагая, что списки имеют одинаковую длину, например:
list1 = [1, 2, 3]
list2 = ["a", "b", "c"]
Я хочу, чтобы это произвело новый список как это:
[[1,"a"], [2,"b"], [3,"c"]]
3 ответа
Я не думаю, что вы понимаете, что str.join
для.
str.join
является строковым методом, который принимает итеративный (обычно список) строк и возвращает новый строковый объект, который является объединением тех строк, разделенных строкой, для которой был вызван метод.
Ниже приведена демонстрация:
>>> strs = ['a', 'b', 'c']
>>> ''.join(strs)
'abc'
>>> '--'.join(strs)
'a--b--c'
>>>
Это означает, что вы не будете использовать str.join
за то, что ты пытаешься сделать. Вместо этого вы можете использовать zip
и понимание списка:
>>> list1 = [1, 2, 3]
>>> list2 = ["a", "b", "c"]
>>> [list(x) for x in zip(list1, list2)]
[[1, 'a'], [2, 'b'], [3, 'c']]
>>>
Однако обратите внимание, что если вы используете Python 2.x, вы можете использовать itertools.izip
вместо zip
:
>>> from itertools import izip
>>> list1 = [1, 2, 3]
>>> list2 = ["a", "b", "c"]
>>> [list(x) for x in izip(list1, list2)]
[[1, 'a'], [2, 'b'], [3, 'c']]
>>>
Как и Python 3.x zip
, itertools.izip
вернет итератор (вместо списка, подобного Python 2.x zip
). Это делает его более эффективным, особенно при работе с большими списками.
Эврика! Друг мой, функция соединения, которую ты ищешь в этом контексте:
def join(l1, l2):
return [list(x) for x in zip(l1, l2)]
print join(list1, list2)
:-)