Как я могу объединить два списка в Python? - PullRequest
0 голосов
/ 26 мая 2020
to_do_list = ["studying", "coding"]

Times = [3, 4] #per hour

Я хочу быть таким:

["studying", 3, "coding", 4]

Ответы [ 6 ]

1 голос
/ 26 мая 2020

В Python есть словари, которые сопоставляют два элемента друг с другом:

это то, что вы ищете, или вы пытаетесь автоматизировать это объединение двух списков thisdict = {"brand": «Ford», «model»: «Mustang», «year»: 1964} print (thisdict)

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

Для этого могут быть разные способы.

Если задача, которую вы хотите выполнить, - это « поместить элементы из каждого списка поочередно в один список », наиболее интуитивно понятным способом будет используйте для l oop.

Предполагая, что два списка имеют одинаковую длину,

list_1 = [1, 2, 3, 4, 5]
list_2 = ['a', 'b', 'c', 'd', 'e']

list_out = []
for i in range(len(list_1)):
    list_out.append(list_1[i])
    list_out.append(list_2[i])

Или, если вы хотите сделать это проще, попробуйте следующее:

list_out = sum([[a, b] for a, b in zip(list_1, list_2)], [])

(На самом деле приведенный выше код можно разделить на две строки:

zipped = [[a, b] for a, b in zip(list_1, list_2)] # using list comprehension and zip function
# zipped = [[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd'], [5, 'e']]

list_out = sum(zipped, [])  # concatenate all list elements in 'zipped'
0 голосов
/ 26 мая 2020

Объединение - это когда вы добавляете один список в конец другого:

>>> to_do_list + Times
['studying', 'coding', 3, 4]

Но вы этого не хотите; вы хотите, чтобы они чередовались! Функция zip - отличный способ сделать это. Когда вы zip объединяете два списка вместе, вы получаете одну итерацию кортежей, которые «сжимают» списки вместе:

>>> [t for t in zip(to_do_list, Times)]
[('studying', 3), ('coding', 4)]

Чтобы извлечь элементы из этих кортежей и поместить их в один список, добавьте другое понимание (т.е. сделайте что-то вроде for i in t для каждого t, которое вы получили из zip):

>>> [i for t in zip(to_do_list, Times) for i in t]
['studying', 3, 'coding', 4]
0 голосов
/ 26 мая 2020

Наиболее быстрыми решениями, вероятно, являются использование zip:

list1 = [1,2]
list2 = [3,4]

list(zip(list1,list2))

Или некоторое понимание списка:

[sub_list[i] for i in range(len(list2)) for sub_list in [list1, list2]] 

Вывод:

[1,3,2,4]

Для других решений: https://www.geeksforgeeks.org/python-merge-two-lists-alternatively/

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

Проверить https://www.geeksforgeeks.org/python-interleave-multiple-lists-of-same-length/, который разделяет следующее.

# initializing lists  
test_list1 = [1, 4, 5] 
test_list2 = [3, 8, 9] 

# printing original lists 
print ("Original list 1 : " + str(test_list1)) 
print ("Original list 2 : " + str(test_list2)) 

# using list slicing 
# to interleave lists 
res = test_list1 + test_list2 
res[::2] = test_list1 
res[1::2] = test_list2 

# printing result 
print ("The interleaved list is : " + str(res)) 

Для вашей программы вы можете сделать это:

>>> to_do_list = ["studying", "coding"]
>>> times=[3,4]
>>> res = to_do_list + times #combine lists
>>> res[::2] = to_do_list #every other element starting at 0
>>> res[1::2] = times #every other element starting at 1
>>> print(res)
['studying', 3, 'coding', 4]
0 голосов
/ 26 мая 2020

Объединение - это когда вы добавляете один список в конец другого:

>>> to_do_list + Times
['studying', 'coding', 3, 4]

Но вы этого не хотите; вы хотите, чтобы они чередовались! Функция zip - отличный способ сделать это:

>>> [t for t in zip(to_do_list, Times)]
[('studying', 3), ('coding', 4)]
>>> [i for t in zip(to_do_list, Times) for i in t]
['studying', 3, 'coding', 4]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...