Переменная p, указанная перед присваиванием во внешней области - PullRequest
2 голосов
/ 06 мая 2019

Я пытаюсь решить проблему, которую я уже решил ранее, но теперь использую списки.Проблема проста: у меня есть список, и я хочу инвертировать его, используя понимание списка

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

v=[]
p=[]

def listt():
    v=[int(input('Digit element\n'))for j in range(0,int(input('Digit number of elements')))]
    return v
print(listt())

def invert_list(v):
    p=[p.append(v[j]) for j in range(len(v),-1,-1)]
    return p
print(invert_list(v))

Ответы [ 3 ]

3 голосов
/ 06 мая 2019

Попробуйте вместо p=[p.append(v[j]) for j in range(len(v),-1,-1)]:

p=[v[j] for j in range(len(v),-1,-1)]
1 голос
/ 06 мая 2019

p - локальная переменная; Вы не можете добавить к нему, пока он не существует.

Непонятно, зачем вам глобальные переменные p и v (обратите внимание, что listt не изменяет глобальные v).

def listt():
     return [int(input('Digit element\n'))for j in range(0,int(input('Digit number of elements')))]

def invert_list(v):
    return [v[j] for j in range(len(v)-1,-1,-1)]

x = listt()
print(x)
print(invert_list(x))
1 голос
/ 06 мая 2019

Когда вы делаете -

p=[p.append(v[j]) for j in range(len(v),-1,-1)]

p не существует, следовательно, ошибка.

Вы можете сделать следующее -

def invert_list(v):
    p = []
    for j in range(len(v)-1,-1,-1):
         p.append(v[j])
    return p
...