Элемент Python Counter для выравнивания списка - PullRequest
0 голосов
/ 22 сентября 2018

Теперь, чтобы сгладить элемент Counter, я использую код

import operator
from collections import Counter
from functools import reduce

p = Counter({'a': 2, 'p': 1})
n_p = [[e] * p[e] for e in p]
f_p = reduce(operator.add, n_p)

# result: ['a', 'a', 'p']

Так что мне интересно, можно ли это сделать более напрямую.

Ответы [ 3 ]

0 голосов
/ 22 сентября 2018

Это Counter.elements

p = Counter({'a': 2, 'p': 1})
p.elements()  # iter(['a', 'a', 'p'])
list(p.elements())  # ['a', 'a', 'p']
''.join(p.elements())  # 'aap'

Обратите внимание, что (согласно документации)

Элементы возвращаются в произвольном порядке

Так что вы можете отсортировать результат, чтобы получить стабильный заказ.

0 голосов
/ 24 сентября 2018

Только для цикла:

from collections import Counter

p = Counter({'a': 2, 'p': 1})
plist = []
for tup in p.items():
    for n in range(tup[1]):         
        plist.append(tup[0])
print(plist)

Выход:

['a', 'a', 'p']
>>> 
0 голосов
/ 22 сентября 2018

Вы можете использовать понимание вложенного списка:

[i for a, b in p.items() for i in [a]*b]

Вывод:

['a', 'a', 'p']
...