现在要展平计数器元素,我正在使用代码
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']
所以我想知道,如果它可以更直接地完成。
现在要展平计数器元素,我正在使用代码
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']
所以我想知道,如果它可以更直接地完成。
p = Counter({'a': 2, 'p': 1})
p.elements() # iter(['a', 'a', 'p'])
list(p.elements()) # ['a', 'a', 'p']
''.join(p.elements()) # 'aap'
请注意(根据文档)
元素以任意顺序返回
因此,您可能希望对结果进行排序以获得稳定的顺序。
您可以使用嵌套列表推导:
[i for a, b in p.items() for i in [a]*b]
输出:
['a', 'a', 'p']
仅使用 for 循环:
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']
>>>