回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试图编写一个类,它的工作方式与itertools模块中的cycle相同,但有一些附加的功能。我希望有可能从我正在迭代的列表中删除元素。在</p>
<p>这是我的代码:</p>
<pre><code>class myCycle(object):
def __init__(self, list):
self.list = list
def __iter__(self):
def iter(self):
while True:
if not self.list:
break
for e in self.list:
yield e
return iter(self)
def remove(self, e):
self.list.remove(e)
</code></pre>
<p>它工作得很好,只有一个例外。让我们看看示例:</p>
^{pr2}$
<p>从列表中删除1后,索引会移动,这可能是我的输出中没有2的原因。在</p>
<p>但是我怎样才能让它工作呢?或者有其他方法来实现这个功能?在</p>
<p><strong>编辑:</strong></p>
<p>在你的评论之后,我会尽力解释我想做什么。在</p>
<p>我有一个带玩家动作的字符串,看起来像这样:</p>
<pre><code>actions = "sBcffcffcfrfccc"
</code></pre>
<p>它来自扑克,动作f平均折叠,c呼叫等等。对我们来说最有趣的是折叠。在</p>
<p>我还有球员名单:</p>
<pre><code>players = ['Saxum', 'Erasmus', 'Anders', 'Ginger', 'Adam',
'Crusoe', 'OgoPogo', 'Hari', 'Sanja', 'Hooke']
</code></pre>
<p>我要给每个玩家分配动作。因此,我们将介绍动作和玩家:</p>
<pre><code>Saxum -> s
Erasmus -> B
Anders -> c
Ginger -> f
Ginger folded, we should remove this player. So how player list look like now:
players = ['Saxum', 'Erasmus', 'Anders', 'Adam',
'Crusoe', 'OgoPogo', 'Hari', 'Sanja', 'Hooke']
Adam -> f
Adam folded, we should remove this player. So how player list look like now:
players = ['Saxum', 'Erasmus', 'Anders',
'Crusoe', 'OgoPogo', 'Hari', 'Sanja', 'Hooke']
Crusoe -> c
OgoPogo -> f
OgoPogo folded, we should remove this player. So how player list look like now:
players = ['Saxum', 'Erasmus', 'Anders',
'Crusoe', 'Hari', 'Sanja', 'Hooke']
Hari -> f
Hari folded, we should remove this player. So how player list look like now:
players = ['Saxum', 'Erasmus', 'Anders',
'Crusoe', 'Sanja', 'Hooke']
Sanja -> c
Hooke -> f
Hooke folded, we should remove this player. So how player list look like now:
players = ['Saxum', 'Erasmus', 'Anders',
'Crusoe', 'Sanja']
Hooke was last on the list, so we start from beginning.
Saxum -> r
Erasmus -> f
Erasmus folded, we should remove this player. So how player list look like now:
players = ['Saxum', 'Anders',
'Crusoe', 'Sanja']
Anders -> c
Crusoe -> c
Sanja -> c
</code></pre>
<p>这就是我开始实施我的循环的原因。但也许有更好的方法?在</p>