<p>有几个合理的方法来做你想做的事。你知道吗</p>
<p>最简单的方法是让类将索引存储到列表中,而不是直接存储列表项。这样,您就可以增加索引并使用<code>%</code>模运算符将其环绕:</p>
<pre><code>class Radio:
def __init__(self):
self.stations=["STATIC","97.2", "99.6", "101.7", "105.3", "108.5"]
self.station_index = 0
def seek(self):
print("Currently tuned to", self.stations[self.station_index])
print("Seeking...")
self.station_index = (self.station_index + 1) % len(self.stations)
print("Now tuned to", self.stations[self.station_index])
</code></pre>
<p>解决这个问题的一种“更奇特”的、可能更具Python风格的方法是使用Python标准库中的<code>itertools</code>模块中的<code>cycle</code>生成器。它返回一个迭代器,该迭代器从您的列表中生成值,在到达末尾时重新开始。虽然您通常只处理<code>for</code>循环中的迭代器,但是手工使用<a href="https://docs.python.org/3/tutorial/classes.html#iterators" rel="nofollow">iterator protocol</a>也很容易。在本例中,我们只想调用迭代器上的<code>next</code>,以获得下一个值:</p>
<pre><code>import itertools
class Radio:
def __init__(self):
self.stations = itertools.cycle(["STATIC","97.2", "99.6", "101.7", "105.3", "108.5"])
self.current_station = next(self.stations)
def seek(self):
print("Currently tuned to", self.current_station)
print("Seeking...")
self.current_station = next(self.stations)
print("Now tuned to", self.current_station)
</code></pre>