有没有一个简单的方法可以循环迭代枚举类型?

3

我有一个枚举类,用来存储4个季节并希望能够自动跳转到下一个季节。当它到达最后一个季节(秋季),我希望它回到第一个季节(冬季)。有没有简单的方法来实现这个功能?或者我最好使用列表或其他一些结构。我在网上找到的一些答案似乎有点过度设计了,所以我想知道是否值得使用枚举。

from enum import Enum, auto

class Season(Enum):
    WINTER = auto()
    SPRING = auto()
    SUMMER = auto()
    FALL   = auto()

>>> season = Season.SUMMER
>>> season.next()
<Season.FALL: 4>
>>> season.next()
<Season.WINTER: 1>
1个回答

5

Enum已经支持迭代协议,因此非常容易使用itertools.cycle进行循环:

>>> from itertools import cycle
>>> seasons = cycle(Season)
>>> next(seasons)
<Season.WINTER: 1>
>>> next(seasons)
<Season.SPRING: 2>
>>> next(seasons)
<Season.SUMMER: 3>
>>> next(seasons)
<Season.FALL: 4>
>>> next(seasons)
<Season.WINTER: 1>

1
如果这不够用,请参考https://dev59.com/qITba4cB1Zd3GeqP8Z3b的内容。 - mkrieger1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接