簡體   English   中英

如何在Python類對象中創建唯一列表?

[英]How to make unique lists across Python class objects?

我正在嘗試制作一個python類,該類保留每個類的均勻分布的隨機數列表,但是數字對於該類必須是唯一的。 但是,每個新對象中的列表都是從第一個對象中復制的,而如果我手動將新值附加到第二個對象列表的內容中,則將相同的更改應用於第一個對象的列表,並且對於每個新類,我都會創建一個列表再次被復制,並附加我指定的許多值。

代碼如下:

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設置為類變量,該變量將始終由該類的所有實例共享,而不是由實例變量共享。 詳情請參閱這里: https : //www.digitalocean.com/community/tutorials/understanding-class-and-instance-variables-in-python-3

希望有幫助!

只需在__init__而不是在類聲明中聲明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))

如果要確保每個對象在所有實例中都有唯一的編號,則需要讓每個實例根據setclass級別檢查生成的值以確保唯一性。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM