Класс счетчика Python: добавление или увеличение одного элемента
для увеличения одного элемента в коллекций.Счетчик, вы должны добавить его в список, чтобы использовать Counter.update
.
c = Counter()
for item in something:
for property in properties_of_interest:
if item.has_some_property: # pseudocode: more complex logic here
c.update([item.property])
elif item.has_some_other_property:
c.update([item.other_property])
# elif... etc
A set
использует .update
добавить несколько элементов, и add
добавить один. Почему не Counter
работать так же? Могу ли я заставить его действовать аналогично (т. е. исключить необходимость помещать свойство в список)?
представьте себе случай, когда у вас есть некоторые неизвестные объекты, и вы пытаетесь много разных вещей, чтобы быстро узнать некоторые предварительные вещи о них: производительность и масштабирование не имеют значения, а понимание сделало бы добавление и вычитание логики трудоемкими.
3 ответов
Ну, вам действительно не нужно использовать методы Counter
для того, чтобы посчитать, не так ли? Есть +=
оператор для этого, который также работает совместно с счетчиком.
c = Counter()
for item in something:
if item.has_some_property:
c[item.property] += 1
elif item.has_some_other_property:
c[item.other_property] += 1
elif item.has_some.third_property:
c[item.third_property] += 1
>>> c = collections.Counter(a=23, b=-9)
вы можете добавить новый элемент и установить его значение следующим образом:
>>> c['d'] = 8
>>> c
Counter({'a': 23, 'd': 8, 'b': -9})
инкремент:
>>> c['d'] += 1
>>> c
Counter({'a': 23, 'd': 9, 'b': -9}
обратите внимание на то, что c['b'] = 0
не удалить:
>>> c['b'] = 0
>>> c
Counter({'a': 23, 'd': 9, 'b': 0})
для удаления используйте del
:
>>> del c['b']
>>> c
Counter({'a': 23, 'd': 9})
счетчик является подклассом dict
есть более подходящие для Python способ сделать то, что вы хотите:
c = Counter(item.property for item in something if item.has_some_property)
использует выражение генератор вместо открытого кодирования петлю.
Edit: пропустил ваш абзац без списка-понимания. Я все еще думаю, что это способ использовать Counter
на практике. Если у вас слишком много кода, чтобы поместить его в выражение генератора или понимание списка, часто лучше разложить это на функции и вызвать это из понимание.