<p>这是完整的脚本,我想你想要的。但在我粘贴它逃跑之前,有两件事值得一提。1你需要在原地交换物品。2您需要考虑超出范围的索引错误。你知道吗</p>
<p>首先,我设想使用<code>deque</code>个具有<code>maxlen</code>字段集的deques。<code>deque</code>可从<code>collections</code>库获得。所以要向左移动,你在右边弹出,在左边插入,向右移动,你在左边弹出,在右边附加。但后来我有了另一个主意。你知道吗</p>
<p>坚持使用列表列表,在适当的位置交换项并避免超出范围的错误,因为新计算的索引位于包含项的列表长度的非负整数模集内。你知道吗</p>
<p>别说了。在python中就地交换,给定:</p>
<pre><code>x = [8, 21, 100, 9, 5]
</code></pre>
<p>您需要:</p>
<pre><code>x[2], x[3] = x[3], x[2]
</code></pre>
<p>导致:</p>
<pre><code>x = [8, 21, 9, 100, 5]
</code></pre>
<p>下面的脚本跟踪两个索引,<code>x</code>对应于要向左和向右移动的项的索引,字符串,<code>y</code>对应于包含要向左和向右移动的项的内部列表项的索引(内部列表本身是上下移动的)。我指的是位置。所以<code>x</code>指向字符串,<code>y</code>指向列表。你知道吗</p>
<p>要在包含列表中上下移动,只需知道要移动的列表的索引<code>y</code>。要左右移动项(字符串),您需要知道包含列表索引<code>y</code>和项索引<code>x</code>。你知道吗</p>
<hr/>
<pre><code>#!/usr/bin/python
from collections import deque
def move_dowm(data, y):
old_y = y
y = (y + 1) % len(data)
data[old_y], data[y] = data[y], data[old_y]
return y
def move_up(data, y):
old_y = y
y = (y - 1) % len(data)
data[old_y], data[y] = data[y], data[old_y]
return y
def move_right(data, x, y):
old_x = x
x = (x + 1) % len(data[y])
data[y][old_x], data[y][x] = data[y][x], data[y][old_x]
return x
def move_left(data, x, y):
old_x = x
x = (x - 1) % len(data[y])
data[y][old_x], data[y][x] = data[y][x], data[y][old_x]
return x
if __name__ == '__main__':
dataset = [
[' ', ' ', ' ', ' '],
['1', ' ', ' ', ' '],
[' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' '],
]
x, y = 0, 1
print dataset
print '-' * 90
y = move_up(dataset, y)
print dataset
print '-' * 90
y = move_dowm(dataset, y)
print dataset
print '-' * 90
x = move_left(dataset, x, y)
print dataset
print '-' * 90
x = move_right(dataset, x, y)
print dataset
print
</code></pre>