Python 与元素列表相反
Python Counter to list of elements
现在要展平 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']
所以我想知道是否可以更直接地完成。
您可以使用嵌套列表理解:
[i for a, b in p.items() for i in [a]*b]
输出:
['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'
请注意(根据文档)
Elements are returned in arbitrary order
因此您可能希望对结果进行排序以获得稳定的顺序。
只有 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']
>>>
现在要展平 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']
所以我想知道是否可以更直接地完成。
您可以使用嵌套列表理解:
[i for a, b in p.items() for i in [a]*b]
输出:
['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'
请注意(根据文档)
Elements are returned in arbitrary order
因此您可能希望对结果进行排序以获得稳定的顺序。
只有 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']
>>>