python:附加到列表中的对象中的列表
我不懂python中的列表python:附加到列表中的对象中的列表,python,python-3.x,Python,Python 3.x,我不懂python中的列表 class Foo: vals=[] id=-1 j=-1 def __init__(self,ID): self.id=ID foos=[] for i in range(10): foos.append(Foo(i)) for j in range(15): for f in foos: if f.id == j: f.vals.append(j)
class Foo:
vals=[]
id=-1
j=-1
def __init__(self,ID):
self.id=ID
foos=[]
for i in range(10):
foos.append(Foo(i))
for j in range(15):
for f in foos:
if f.id == j:
f.vals.append(j)
f.j=j
break
for f in foos:
print(str(f.j)+" "+str(f.vals))
输出为:
0 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
4 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
5 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
6 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
7 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
8 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
9 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
为什么输出不是这样的:
0 [0]
1 [1]
...
或者我必须改变什么才能得到这个输出
谢谢。您正在创建“类变量”。这意味着变量在类的所有实例之间共享 您希望您的变量属于类
Foo
的每个实例,因此您应该通过在\uuuu init\uuuu
中定义它们来创建“实例变量”
class Foo:
def __init__(self,ID):
self.id=ID
self.vals=[]
self.j=-1
输出:
0 [0]
1 [1]
2 [2]
3 [3]
4 [4]
5 [5]
6 [6]
7 [7]
8 [8]
9 [9]
你可以看到一个
您可以看到一个.,因为您将
vals
设置为类的所有实例共享的类属性,而不是实例属性。因此,每个实例都附加到同一个共享列表中。您的问题不清楚。首先,一旦您跟踪了发布代码的中间结果和数据流,您不了解操作的哪些方面?这不是一个要求全面浏览代码块的网站。第二,您尝试过什么来产生期望的输出?发布的代码对于如此简单的输出来说是多余的。这肯定是一个重复的问题,我们已经为您找到了一个很好的答案,但简短的版本是去掉vals=[]
,而是将self.vals=[]
放在\uu init\uuuu
方法中。对于id
和j
可能也是如此。