Использование 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 ] = значение' вместо 'self.uses [key] = 0'? Похоже, что в противном случае вы устанавливаете счетчик на значение в списке ... – 6502