创建自定义集合

2024-04-20 09:35:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个类(item),它只包含位置和状态数据(数字表示项的唯一枚举,状态可以是0,1)。你知道吗

class item:
    def __init__(self, number, state):
        self.number = number
        self.state = state

    def __repr__(self):
        return('item(%s,%s)'%(self.position,self.state))

我正在尝试为这些项目创建一个容器/集合,其中一个随机子集的状态设置为1,为此,我当前使用:

from random import randint
N = 1024
num_defectives = 10
list_of_items = [item(i,0) for i in range(0,N)]
for i in range(0, num_defectives):
    r = randint(0,N)
    list_of_items[r].state = 1

但是我想把它包装成一个不是原始列表的东西(因为我认为在我的代码中挂起它不是特别好),而是跟踪项目状态的总和。你知道吗

理想情况下,它还有一个状态为1的项的位置的不可访问列表(我只能查询状态的总和,或者我的子集是否包含状态为1的这些项的成员)。你知道吗

目前,我正在随机选择这个列表的成员,并测试如下状态的总和:

items_to_test = [randint(0,n) for i in range(0,groupSize)]
group = []
for item in items_to_test:
    group.append(inList[item])
states = sum([x.state for x in group])
if states: 
    #do some stuff to find an item with state 1, remove it from list_of_items
else:
    #remove all the items in group from list_of_items

基本上,我正在寻找一个更干净的方式来做所有这些行为通过收集。你知道吗

我已经找到了这个问题的答案:

How to subclass Python list without type problems?

还有这个问题:

What to consider before subclassing list?

读一下:

http://docs.python.org/2/reference/datamodel.html#emulating-container-types

但是我仍然不确定从哪里开始(除了子类化对象),因为我对python提供的所有“神奇”函数都相当陌生。。你知道吗


Tags: oftoinfromselfnumberfor状态
1条回答
网友
1楼 · 发布于 2024-04-20 09:35:06

首先在列表周围做一个简单的包装。很可能,你不需要更复杂的东西。我认为您的用例对于子类化list来说过于专业化了。你知道吗

from random import randint

# user-defined class names are conventionally capitalized.
class Item:
    ...

class ItemCollection:
    def __init__(self, N=1024, num_defectives=10):
       self.list_of_items = [Item(i,0) for i in range(0,N)]]
       for i in range(0, self.num_defectives):
          r = randint(0,N)
          self.list_of_items[r].state = 1
       self.state_sum = sum(x.state for x in self.list_of_items)

    def states_of_one(self):
        return [ x from self.list_of_items if x.state == 1 ]

    def has_state_of_one(self, i):
        return self.list_of_items[i].state == 1

相关问题 更多 >