使用Python 3.4如何爲python列表的每個元素實現一個計數器?
我有一種方法可行,但我認爲可能有更好的方法。 我想列出一個方法expand()
,它從列表中選擇一個隨機元素,但是每次選擇該元素時,計數器都會增加。我嘗試子類str
能夠添加屬性,但它不起作用。
我得到的主要問題是表達式random.randint(0,len(self)-1)
和使用局部變量似乎不是Pythonic。之前,我添加了計數器,我可以只輸入random.choice(self)
class clauses(list):
def __init__(self):
self.uses = []
def __setitem__(self,key,value):
self.uses[key]=value
super().__setitem__(self,key,value)
def __delitem__(self,key):
del(self.uses[key])
super().__delitem__(key)
def append(self,value):
self.uses.append(0)
super().append(value)
def extend(self,sequence):
for x in sequence:
self.uses.append(0)
super().append(x)
def expand(self):
n = random.randint(0,len(self)-1)
self.uses[n] += 1
return(self[n])
如果某個特定元素被刪除,計數器會發生什麼? – thefourtheye
而不是'random.randint(0,len(self) - 1)'use'random.randrange(0,len(self))',自從Python 1.5.2以來一直存在 –
應該'self.uses [key ] = value'而不是'self.uses [key] = 0'?看來,否則你正在將計數器設置爲列表中的值...... – 6502