现在要压扁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']
Run Code Online (Sandbox Code Playgroud)
所以我很想知道,如果可以更直接地完成.
我正在尝试使用Python标准库集合。
我有一个计数器
>>> c = Counter('achdnsdsdsdsdklaffaefhaew')
>>> c
Counter({'a': 4,
'c': 1,
'h': 2,
'd': 5,
'n': 1,
's': 4,
'k': 1,
'l': 1,
'f': 3,
'e': 2,
'w': 1})
Run Code Online (Sandbox Code Playgroud)
我现在想要的是以某种方式获取此计数器的子集作为另一个Counter对象。像这样:
>>> new_c = do_subset(c, [d,s,l,e,w])
>>> new_c
Counter({'d': 5,
's': 4,
'l': 1,
'e': 2,
'w': 1})
Run Code Online (Sandbox Code Playgroud)
先感谢您。
导入队列
q = queue.Queue()
q.put(5)
q.put(7)
print(q.get()) 删除队列前面的元素。如何在不删除它的情况下打印此元素?有可能这样做吗?
Python 会dict.pop(key[, default])忽略由 设置的默认值,collections.defaultdict(default_factory)如以下代码片段所示:
from collections import defaultdict
d = defaultdict(lambda: 1)
d['a']
d['b'] = 2
print(d.pop('a')) # 1
print(d.pop('b')) # 2
print(d.pop('c', 3)) # 3
d.pop('e') # KeyError: 'e'
Run Code Online (Sandbox Code Playgroud)
d是一个defaultdict(lambda: 1). d.pop('e')导致KeyError. 这是故意的吗?不应该d.pop('e')返回,1因为这是设置的默认值defaultdict?
我正在尝试使用 for 循环用命名元组填充元组。
下面的示例代码有效:
import collections
Experiment = collections.namedtuple('Experiment', ['parameter', ])
nsize = 3
parameters = {}
for n in range(0, nsize):
parameters[n] = n +1
experiments = (
Experiment(parameter = parameters[0]),
Experiment(parameter = parameters[1]),
Experiment(parameter = parameters[2]),)
Run Code Online (Sandbox Code Playgroud)
但是,我想用 for 循环替换最后一部分:
for n in range(0, nsize):
experiments[n] = Experiment(parameter = parameters[n])
Run Code Online (Sandbox Code Playgroud)
这给出了错误:
TypeError: 'tuple' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Python的collections.Counter.total()的时间复杂度是多少?我已阅读该方法的文档,但没有提及其效率。有谁知道该方法是如何在幕后实现的以及它的时间复杂度是多少?