我有一个交通灯枚举定义可能的状态:
class TrafficLightPhase(Enum):
RED = "RED"
YELLOW = "YELLOW"
GREEN = "GREEN"
我轮询一个交通信号灯以每秒获取当前状态,然后使用以下函数将值放入
deque
中:def read_phases():
while running:
current_phase = get_current_phase_phases()
last_phases.append(current_phase)
time.sleep(1)
我想对相同状态的序列进行分组,以了解交通信号灯的相位计时。
我尝试使用
Counter
的collections
类,如下所示:counter = collections.Counter(last_phases)
它将非常不同的状态归为一组,但是我不知道下一个周期何时开始。 是否存在类似于
Counter
的允许重复的数据结构? ,这样我就可以得到如下结果:Counter({
'RED': 10,
'GREEN': 10,
'YELLOW': 3,
'RED': 10,
'GREEN': 10,
'YELLOW': 3,
'RED': 10,
'GREEN': 10,
'YELLOW': 3
})
代替:
柜台({
'红色':30,
'绿色':30,
'黄色':9
})
最佳答案
我会为此使用itertools.groupby
。它将对同一元素的连续运行进行分组,然后您可以检查每次运行的长度。
>>> from itertools import groupby
>>> last_phases= ['red', 'red', 'yellow', 'red', 'red', 'green']
>>> [(key, len(list(group))) for key,group in groupby(last_phases)]
[('red', 2), ('yellow', 1), ('red', 2), ('green', 1)]
关于python - 计数器允许重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50176987/