Список ссылок - PullRequest
       1

Список ссылок

0 голосов
/ 26 января 2020

Как я могу ссылаться на некоторые значения списка в python на другие? (см. пример ниже)

my_list = [ 5, my_list[0] * 2, 25 - my_list[1] ]
print(my_list) # expected output: [5, 10, 15]

Я получаю ошибку (это может быть потому, что я не знаю, как это сделать)

Traceback (most recent call last):
  File "test.py", line 1, in <module>
    my_list = [ 5, my_list[0] * 2, 25 - my_list[1] ]
NameError: name 'my_list' is not defined

Ответы [ 3 ]

3 голосов
/ 26 января 2020

Вы не можете; в общем, имя на LHS ни к чему не привязано, пока RHS не создаст значение. (Ошибка связана с тем, что вы пытаетесь повторно использовать имя, связанное с типом list, в качестве имени экземпляра из list. Не делать это.)

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

lst = [(y := 5), (z := y * 2), 25 - z] 

Более простое определение, которое будет работать в любой версии Python, будет просто использовать временные переменные:

y = 5
z = y * 2
lst = [y, z, 25 - z]
1 голос
/ 26 января 2020

Ответ ниже был действителен для вопроса до того, как автор его отредактировал.

Автор попытался сделать что-то вроде этого:

list = [5, list[0] * 2, 25 - list[1]]

Вместо ответа он получил

TypeError: 'type' object is not subscriptable

Во-первых, list уже используется для Python встроенного list, и хотя это технически возможно, вы не должны использовать его в качестве имени переменной.

Тем не менее, в первой строке вы используете ссылку list[0]. Поскольку list ранее не использовался для определения переменной для вашего списка, этот list относится к встроенному ключевому слову list.

Как объясняется в сообщении об ошибке, вы не можете получить доступ к встроенному list по индексу.

0 голосов
/ 26 января 2020

Вы можете ссылаться на переменные перед их созданием, но вы можете последовательно добавить элемент в список, например

my_list = [ 5 ]
my_list.append(my_list[0] * 2)
my_list.append(25 - my_list[1])
print(my_list) # expected output: [5, 10, 15]

(Обратите внимание, что я также изменил имя вашей переменной, потому что list является встроенным именем класса).

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