Как добавить список со списком списков, чтобы каждый индекс был списком, содержащим элемент и список в python - PullRequest
2 голосов
/ 29 мая 2020

У меня есть два списка для начала.

Скажем, у меня есть список вроде ls_1 = ["2", "1", "2", "1"] и второй список, содержащий списки ls_2 = [[2, 7], [1, 2], [4, 6], [5,2]]

как бы их объединить в:

final_ls = [["2", [2, 7]], ["1", [1, 2]], ["2", [4, 6]], ["1", [5, 2]]]

где final_ls [0] [0] будет «2»? и final_ls [1] [0] будет "1"?

Я пытался добавить списки, но это не сработало

Ответы [ 3 ]

3 голосов
/ 29 мая 2020

Использовать zip:

ls_1 = ["2", "1", "2", "1"]

ls_2 = [[2, 7], [1, 2], [4, 6], [5,2]]

final_ls = [[n,m] for n,m in zip(ls_1,ls_2)]

print(final_ls)

Вывод:

[['2', [2, 7]], ['1', [1, 2]], ['2', [4, 6]], ['1', [5, 2]]]
0 голосов
/ 29 мая 2020

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)):).

0 голосов
/ 29 мая 2020

Определение ваших списков:

ls_1 = ["2", "1", "2", "1"]
ls_2 = [[2, 7], [1, 2], [4, 6], [5,2]]

Используйте функцию zip следующим образом:

final_ls = list(zip(ls_1,ls_2))
print(final_ls)    

# [('2', [2, 7]), ('1', [1, 2]), ('2', [4, 6]), ('1', [5, 2])]

Требуемый результат:

final_ls[0][0]  #'2'
final_ls[1][0]  #'1'

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...