Объединение двух списков в кортежи в 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). Это делает его более эффективным, особенно при работе с большими списками.

list(map(list, zip(list1, list2)))

Эврика! Друг мой, функция соединения, которую ты ищешь в этом контексте:

def join(l1, l2):
    return [list(x) for x in zip(l1, l2)]

print join(list1, list2) 

:-)

Другие вопросы по тегам