【问题标题】:Variable p referenced before assignment in enclosing scope在封闭范围内赋值之前引用的变量 p
【发布时间】:2019-05-06 12:59:26
【问题描述】:

我正在尝试解决我之前已经解决但现在使用列表推导的问题。问题很简单,我有一个列表,我想使用列表理解来反转它

定义第一个列表很容易,但是当我附加倒排列表时,它给了我标题中的错误。我知道我们不应该在列表推导中追加,但我不知道该放什么。

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))

【问题讨论】:

标签: python python-3.x list list-comprehension


【解决方案1】:

试试这个而不是p=[p.append(v[j]) for j in range(len(v),-1,-1)]:

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

【讨论】:

  • 我不明白的是你在什么时候告诉你要追加?您只需为 j in range(len(V),-1,-1) 编写 v[j]。这将反转列表,但想象一下我想在列表理解中追加一些其他值?
  • 列表理解中没有附加。列表推导式创建一个新列表,其中包含正在迭代的项目。
【解决方案2】:

p 是一个局部变量;你不能在它存在之前附加它。

不清楚为什么要全局变量pv(注意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))

【讨论】:

    【解决方案3】:

    当你在做的时候——

    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
    

    【讨论】:

    • 但我可以使用列表理解吗?
    • 是的,我做不到。我想我在使用列表理解时无法追加
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    相关资源
    最近更新 更多