Есть ли способ сократить этот вид вставки

#python #insertion-sort

Вопрос:

У меня есть два списка, которые я хочу объединить в один, вот так:

 list_0=[[5], [4], [4], [1], [0], [7], [8], [3], [0]]
list_1=[[0], [9], [6], [4], [5], [9], [5], [9], [3]]
mine_position=[[5], [0], [4], [9], [4], [6], [1], [4], [0], [5], [7], [9], [8], [5], [3], [9], [0], [3]]
 

Код, который у меня есть для их объединения, таков:

 for i in row:
    mine_position.append(i)

mine_position.insert(1, list_1[0])
mine_position.insert(3, list_1[1])
mine_position.insert(5, list_1[2])
mine_position.insert(7, list_1[3])
mine_position.insert(9, list_1[4])
mine_position.insert(11, list_1[5])
mine_position.insert(13, list_1[6])
mine_position.insert(15, list_1[7])
mine_position.insert(17, list_1[8])
 

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

Комментарии:

1. Гарантируется ли, что списки будут иметь одинаковую длину?

Ответ №1:

Вы можете просто застегнуть их вместе. Петли не нужны.

 list_0=[[5], [4], [4], [1], [0], [7], [8], [3], [0]]
list_1=[[0], [9], [6], [4], [5], [9], [5], [9], [3]]
mine_position = list(zip(list_0, list_1))
 

Ответ №2:

Мы видим, что элементы вашего объединенного списка по четным индексам состоят из элементов из list_0 , а нечетные индексы состоят из элементов из list_1 . Приведенный ниже фрагмент кода можно использовать для создания объединенного списка.

Фрагмент кода:

 # Original Lists
list_0=[[5], [4], [4], [1], [0], [7], [8], [3], [0]]
list_1=[[0], [9], [6], [4], [5], [9], [5], [9], [3]]

# Merged List
result = []

total_elements = len(list_0)   len(list_1)

# Indices of respective lists
list0_idx = list1_idx = 0

for i in range(total_elements):
    if i % 2 == 0:
        result.append(list_0[list0_idx])
        list0_idx  = 1
    else:
        result.append(list_1[list1_idx])
        list1_idx  = 1

print(result)
 

Ответ №3:

Как насчет этого?

 list_0=[[5], [4], [4], [1], [0], [7], [8], [3], [0]]
list_1=[[0], [9], [6], [4], [5], [9], [5], [9], [3]]

merged_list = []

for i in range(0, len(list_0)):
    merged_list.append(list_0[i])
    merged_list.append(list_1[i])

print(merged_list)
 

Это показывает это.

 [[5], [0], [4], [9], [4], [6], [1], [4], [0], [5], [7], [9], [8], [5], [3], [9], [0], [3]]
 

Ответ №4:

Сначала вы можете создать новую переменную и назначить ее как list_0. Мы делаем это так, чтобы list_0 не был изменен. Затем используйте цикл и вставляйте элемент list_1 каждые 2 элемента.

 list_0=[[5], [4], [4], [1], [0], [7], [8], [3], [0]]
list_1=[[0], [9], [6], [4], [5], [9], [5], [9], [3]]
merged_list = list_0

idx = 1
for j in list_1:
  merged_list.insert(idx,j)
  idx  = 2

print(merged_list)

#Result: [[5], [0], [4], [9], [4], [6], [1], [4], [0], [5], [7], [9], [8], [5], [3], [9], [0], [3]]
 

ОБРАТИТЕ внимание, что причина, по которой мы увеличиваем его на 2, заключается в том, что в начале итерации в список слияний будет добавлен новый элемент.

Ответ №5:

Использование понимания списка:

 [item for t in [(list_0[i], list_1[i]) for i in range(len(list_0))] for item in t]