如何跨Python类对象创建唯一列表?
我试图创建一个python类,该类在每个类中保留一个均匀分布的随机数列表,但这些数必须是该类的唯一数。但是,每个新对象中的列表都会与第一个对象中的列表完全相同地复制,如果我手动将新值附加到第二个对象列表的内容中,同样的更改会应用到第一个对象的列表,并且对于我创建的每个新类,该列表会再次复制,并附加我指定的任何值 代码如下:如何跨Python类对象创建唯一列表?,python,list,object,Python,List,Object,我试图创建一个python类,该类在每个类中保留一个均匀分布的随机数列表,但这些数必须是该类的唯一数。但是,每个新对象中的列表都会与第一个对象中的列表完全相同地复制,如果我手动将新值附加到第二个对象列表的内容中,同样的更改会应用到第一个对象的列表,并且对于我创建的每个新类,该列表会再次复制,并附加我指定的任何值 代码如下: import random as random class myClass: myRandomList = [] def __init__(self, l
import random as random
class myClass:
myRandomList = []
def __init__(self, lengthOfList):
for i in range(0,lengthOfList):
self.myRandomList.append(random.uniform(-1.0,1.0))
a = myClass(2) #make a list with 2 random numbers
b = myClass(1) #make a list with 1 random number
print(a.myRandomList)
print(b.myRandomList)
上述代码的输出给出以下内容:
[0.3640932307078235, 0.8858169279430881, 0.18712932281033723]
[0.3640932307078235, 0.8858169279430881, 0.18712932281033723]
当它应该给出这样的东西时,而不是:
[0.3640932307078235, 0.8858169279430881]
[0.18712932281033723]
我如何使它在创建一个新类时,只为该类创建一个全新的值列表,而不复制以前实例化的对象的列表,也不影响以前对象的列表?我认为您需要的是类的每个实例(即代码中的a和b)拥有自己的随机数列表,与创建实例时指定的长度匹配。为此,应在init内设置self.myRandomList。以下是对原始代码的更改:
import random as random
class myClass:
def __init__(self, lengthOfList):
self.myRandomList = []
for i in range(0,lengthOfList):
self.myRandomList.append(random.uniform(-1.0,1.0))
a = myClass(2) #make a list with 2 random numbers
b = myClass(1) #make a list with 1 random number
print(a.myRandomList)
print(b.myRandomList)
您之前所做的是将myRandomList设置为类变量,该变量将始终由类的所有实例共享,而不是实例变量。有关更多详细信息,请参见此处:
希望有帮助 只需在
\uuuu init\uuuu
中声明self.myRandomList
,而不是在类声明中声明即可
class myClass:
def __init__(self, lengthOfList):
self.myRandomList = []
for i in range(0,lengthOfList):
self.myRandomList.append(random.uniform(-1.0,1.0))
如果要确保每个对象在所有实例中都有唯一的编号,则需要让每个实例对照
类级别集检查生成的值,以确保唯一性
import random as random
class MyClass:
class_random_set = set()
def __init__(self, lengthOfList):
self.my_random_set = set()
for _ in range(0, lengthOfList):
while True:
num = random.uniform(-1.0, 1.0)
if num not in self.class_random_set:
self.class_random_set.add(num)
self.my_random_set.add(num)
break
a = MyClass(2) #make a set with 2 random numbers
b = MyClass(1) #make a set with 1 random number
print(a.my_random_set)
print(b.my_random_set)
类是对象的蓝图。您的语言令人困惑,因为您使用的是类
与对象
的同义词。你应该编辑你的帖子来澄清。你的帖子有更好的解释,让我的+1每个对象都必须有它自己唯一的随机数集。因此,init方法需要引用一个类
级别集
,以检查该数字是否已经发送给另一个对象。这肯定是我在一夜之间努力解决这个问题后寻找的解决方案,谢谢!赞成票:)!