我有一个交通灯枚举定义可能的状态:

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)

我想对相同状态的序列进行分组,以了解交通信号灯的相位计时。

我尝试使用Countercollections类,如下所示:
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/

10-13 01:20