擅长:python、mysql、java
<p>对于您的特定任务,我会保持初始列表的顺序不变,并检查索引:</p>
<pre><code>l = [0, 1, 0]
n = 0
while n < 1: # choose number of iterations
for i in range(len(l)):
l[i] = (l[i], int(not l[i]))[l[i] == l[(i+2)%len(l)]] # invert when equal to its neighbor
print(l)
n += 1
# [1, 1, 0]
# [1, 0, 0]
# [1, 0, 1]
</code></pre>
<hr/>
<p>然而,为了使列表<em>循环</em>,我宁愿将第一个索引附加到最后一个索引:</p>
<pre><code>l = [1, 2, 3]
for _ in range(7):
print(l)
f = l.pop(0)
l.append(f)
#[1, 2, 3]
#[2, 3, 1]
#[3, 1, 2]
#[1, 2, 3]
#[2, 3, 1]
#[3, 1, 2]
#[1, 2, 3]
</code></pre>
<hr/>
<p>您也可以通过弹出和追加来获得相同的结果,但您必须在每个步骤中根据原始列表对索引进行排序:</p>
<pre><code>for i, _ in enumerate(range(3)):
l[0] = int(not(l[0])) if l[0] == l[2] else l[0]
ind = (len(l) - i)%len(l) # get actual position of first element
original = l[ind:] + l[:ind] # here we start from index 0
print(l[ind:] + l[:ind])
f = l.pop(0)
l.append(f)
</code></pre>
<p>输出:</p>
<pre><code>[1, 1, 0]
[1, 0, 0]
[1, 0, 1]
</code></pre>