Есть ли другой способ добавить элемент в список, и при повторном вызове значение изменится? - PullRequest
0 голосов
/ 03 ноября 2019

В основном я хочу добавить элемент в i-й в строке. Я хочу знать, как исправить этот код.

    list2 = [1,2,3,4,5,6,7]
    def insert(list,index,element):
        list = list[:index] + [element] + list[index:]
    insert(list2,3,7)
    print(list2)

Я ожидал [1,2,3,7,4,5,6,7], но получил [1,2,3,4,5, 6,7] PS Я знаю, что список не связан, но я хочу знать, как изменить список2 без использования встроенных функций. Спасибо за предложения.

Ответы [ 3 ]

0 голосов
/ 03 ноября 2019

Вы должны вернуть список и обновить:

list2 = [1,2,3,4,5,6,7]
def insert(list,index,element):
    return list[:index] + [element] + list[index:]
list2 = insert(list2,3,7)
print(list2)

Лучше использовать встроенный метод insert

list2.insert(3, 7)
0 голосов
/ 03 ноября 2019

Поскольку в вашей функции есть присваивание list =, list будет считаться локальной переменной в этой функции, поэтому она не связана с параметром, передаваемым в функцию.

У вас есть нескольковарианты:

Вернуть новый список:

list2 = [1,2,3,4,5,6,7]

def insert(lst,index,element):
    lst = lst[:index] + [element] + lst[index:]
    return lst

и присвоить возвращаемое значение:

list2 = insert(list2, 3, 7)  # the insert method updates the list in place
print(list2)

Или вам нужно изменить исходный список, не создавая новыйone:

def insert(lst,index,element):
    lst.insert(index, element)

insert(list2, 3, 7)
print(list2)

Но тогда эта функция не слишком полезна, поэтому просто сделайте

list2.insert(3, 7)

В качестве примечания, избегайте использования list в качествеимя переменной, поскольку она будет затенять оригинальную встроенную функцию list.

0 голосов
/ 03 ноября 2019

вы никогда не вносите никаких изменений в list2, вместо этого вы назначаете новый список переменной localscope list. Поэтому, когда функция сначала вызывается list2, а локальная область list указывает на один и тот же объект в памяти.

Затем вы строите новый список и указываете локальному прицелу list на новый адрес памяти нового созданного вами списка. Так что теперь list2 и list не указывают на одни и те же объекты в памяти. вот почему list2 не изменяется.

списки Python уже имеют методы вставки, так что вы можете просто сделать это как

list2 = [1, 2, 3, 4, 5, 6, 7]
list2.insert(3, 7)
print(list2)

в качестве альтернативы, если у вас была неопровержимая причина сделать это самостоятельно встиль, который вы написали, вам придется вернуть новый список и присвоить ему list2

def insert(list, index, element):
    return list[:index] + [element] + list[index:]

list2 = [1, 2, 3, 4, 5, 6, 7]
list2 = insert(list2, 3, 7)
print(list2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...