zip(ls_1, ls_2)
делает почти то, что вы указали.
Существуют различные выражения, которые могут преобразовать это во что-то более близкое к требуемому формату. Чтобы получить точный результат, указанный в вопросе, вы можете использовать что-то вроде list(map(list, zip(ls_1, ls_2)))
или [list(x) for x in zip(ls_1, ls_2)]
.
Однако для многих приложений двухкортежные кортежи будут подходящим типом данных, если вам не нужно изменить (например, добавить) их, и в этом случае будет достаточно просто list(zip(ls_1, ls_2))
.
И если вы намереваетесь только перебирать последовательность, тогда просто zip(ls_1, ls_2)
будет достаточно. Например, al oop for i, j in zip(ls_1, ls_2):
установит i=2
, j=[2,7]
на первой итерации, i=1
, j=[1,2]
на следующей итерации, et c.
Преимущество просто использование простого zip
для больших списков означает, что вы не дублируете без необходимости данные в памяти; вы просто создаете итератор, указывающий на входы, который при необходимости получит соответствующие элементы. То же самое верно и для map(list, zip(ls_1, ls_2))
, если они действительно требуются как двухэлементные списки, но доступ к ним осуществляется только путем итерации по ним (for lst in map(list, zip(ls_1, ls_2)):
).