列表和+ =操作

时间:2015-11-27 04:13:04

标签: python list

我通过声明

来使用list对象
data = []

在我的代码中,没有初始化它,我写了

data += data2

其中data2是包含大量数字的另一个list

此行发生错误:

local variable 'data' referenced before assignment

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:3)

如果您在同一范围内,则无法在初始化数据后获得“在赋值前引用”。

可能是你正在创建一个函数(创建一个新的范围)所以当你说data+=data2时它意味着

data = data + data2 # so what is data in the right hand side?

因此,如果您想引用全局变量,请使用已有的(全局)数据,您必须明确说出global data或将其作为参数传递给函数。

答案 1 :(得分:1)

您必须先初始化阵列。以下是如何解决此问题的工作示例。

data = [0]
data2 = [1,2,3,4,5]
print data
data += data2
print data

答案 2 :(得分:1)

您可能想尝试使用data.extend (data2)而不是使用运算符。

有关将两个列表一起添加的详细讨论,请参阅此问题:Python: take the content of a list and append it to another list

答案 3 :(得分:0)

如果您在功能中使用data += data2,则需要global data

data = []
data2 = [1,2,3,4]

def add():
    globla data

    data += data2

add()
print data

或发送data作为参数

data = []
data2 = [1,2,3,4]

def add(some_data):
    some_data += data2

add(data)
print data

答案 4 :(得分:0)

您的问题已在此处的文档中介绍

https://docs.python.org/3/reference/datamodel.html#object.iadd

  

例如,如果x是具有__iadd__()的类的实例   方法,x += y相当于x = x.__iadd__(y)

所以你看到data正在反弹(在这种情况下对自己来说),但它仍然算作一项任务。

由于data += data2出现在未将data声明为global的函数范围内,因此假定为data的局部变量。

def foo():
    data.extend(data2)           # ok -- global data variable here

def bar():
    data = data.__iadd__(data2)  # not ok -- local data variable here

def baz():
    data += data2                # not ok -- equivalent to bar()