#python #list
#python #Список
Вопрос:
Я только начинаю изучать python, я пробовал некоторый код, и я хотел спросить, почему два следующих кода функционируют по-разному?
Первый пример кода:
def combine_lists(list1, list2):
new_list = list2
index = len(list2)
for items in list1:
new_list.insert(index, items)
return(new_list)
Jamies_list = ["Alice", "Cindy", "Bobby", "Jan", "Peter"]
Drews_list = ["Mike", "Carol", "Greg", "Marcia"]
print(combine_lists(Jamies_list, Drews_list))
Вывод этого первого кода правильный (где я хочу, чтобы список 1 был перевернут):
[‘Майк’, ‘Кэрол’, ‘Грег’, ‘Марсия’, ‘Питер’, ‘Ян’, ‘Бобби’, ‘Синди’, ‘Алиса’]
Второй пример кода:
def combine_lists(list1, list2):
new_list = list2
for items in list1:
new_list.insert(len(list2), items)
return(new_list)
Jamies_list = ["Alice", "Cindy", "Bobby", "Jan", "Peter"]
Drews_list = ["Mike", "Carol", "Greg", "Marcia"]
print(combine_lists(Jamies_list, Drews_list))
Но этот второй код выводит:
[‘Майк’, ‘Кэрол’, ‘Грег’, ‘Марсия’, ‘Алиса’, ‘Синди’, ‘Бобби’, ‘Ян’, ‘Питер’]
Почему существует разница в этих двух выходных данных, если просто присвоить переменной len(list2) и использовать ее для вставки индекса?
Спасибо!
Комментарии:
1.
new_list = list2
не создает новый список.
Ответ №1:
Эта строка:
new_list = list2
Просто создает новое имя для list2
списка, но обе переменные ссылаются на один и тот же список.
Итак, в первом примере вы получаете длину этого списка с index = len(list2)
помощью, а затем используете одно и то же значение for index
на каждой итерации цикла for .
Во втором примере вы получаете len(list2)
для каждой итерации, но поскольку вы изменяете new_list
, вы также изменяете list2
, и его длина будет увеличиваться по мере продвижения.
Если вам нужна копия списка, создайте копию с list(new_list) = list2
помощью или new_list = list2.copy()
Ответ №2:
Первый фрагмент кода
def combine_lists(list1, list2):
new_list = list2
index = len(list2)
for items in list1:
new_list.insert(index, items)
print(new_list)
return(new_list)
Jamies_list = ["Alice", "Cindy", "Bobby", "Jan", "Peter"]
Drews_list = ["Mike", "Carol", "Greg", "Marcia"]
print(combine_lists(Jamies_list, Drews_list))
Вывод:
['Mike', 'Carol', 'Greg', 'Marcia', 'Alice']
['Mike', 'Carol', 'Greg', 'Marcia', 'Cindy', 'Alice']
['Mike', 'Carol', 'Greg', 'Marcia', 'Bobby', 'Cindy', 'Alice']
['Mike', 'Carol', 'Greg', 'Marcia', 'Jan', 'Bobby', 'Cindy', 'Alice']
['Mike', 'Carol', 'Greg', 'Marcia', 'Peter', 'Jan', 'Bobby', 'Cindy', 'Alice']
['Mike', 'Carol', 'Greg', 'Marcia', 'Peter', 'Jan', 'Bobby', 'Cindy', 'Alice']
Для вашего первого кода вы вставляете new_list.insert(index, items)
каждый новый элемент в одну и ту же позицию в течение определенного периода ( len(list2) )
. Каждый раз, когда вы вставляете его, получаете тот же индекс, а последний элемент вставки перемещается на index 1
позицию, и именно поэтому кажется Jamies_list
, что список вставляется в обратном порядке.
Второй фрагмент кода
Поскольку вы выделяете len(list2)
каждый раз for loop
, он динамически обновляет len
и принимает новую позицию нового элемента