Как сделать первый элемент списка неизменным в python? - PullRequest
1 голос
/ 19 марта 2020

Вот мой список,

a = [['a','b','c','d'],['e','f','g','h'],['i','j','k','l'],['m','n','o','p']]

и Вот моя функция,

def add(change,unchange):
    a = change
    b = unchange
    a[0].insert(a[0].index(a[0][2]),"high_range")
    a[0].insert(a[0].index(a[0][3]),"low_range")
    print(a)
    print(b)

Когда я пытаюсь выполнить эту функцию,

add(a,a[0])

I Получаю этот вывод,

[['a', 'b', 'high_range', 'low_range', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l'], ['m', 'n', 'o', 'p']]
['a', 'b', 'high_range', 'low_range', 'c', 'd']

Но мой ожидаемый вывод следующий:

[['a', 'b', 'high_range', 'low_range', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l'], ['m', 'n', 'o', 'p']]
['a', 'b', 'c', 'd']

Как сделать, чтобы первый элемент списка оставался таким же во второй переменной? Извините, я новичок ie.

Ответы [ 3 ]

1 голос
/ 19 марта 2020

Основная проблема в строке:

add(a, a[0])

, поскольку вы мутируете a внутри функции a[0] изменится, так как они указывают на одно и то же. Вы должны разработать свою программу соответственно. Вы можете обратиться к этому ответу. Как клонировать или скопировать список?

, в зависимости от ваших требований, вы можете сделать это.

  1. либо предоставить копию при вызове функции.

add(a, a[0][:]) # или

прочитайте ответ @ ale c.
1 голос
/ 19 марта 2020

Ваша функция прекрасна, но выполните это:

add(a,a[0][:])

это сделает вторую переменную, а именно a[0], копию, которая останется неизменной.

1 голос
/ 19 марта 2020

Поскольку список является изменяемым типом, при вставке значений в a это также отражается в b, поскольку они являются указателями на один и тот же список. Вы можете либо напечатать b перед вставкой значений в список, либо сделать b копию unchange следующим образом:

def add(change,unchange):
    a = change
    b = unchange[:]
    a[0].insert(2, "high_range")
    a[0].insert(3, "low_range")
    print(a)
    print(b)

Кроме того, a[0].index(a[0][2]) является избыточным, вы уже знаете, что индекс равен 2.

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