我正在尝试编写2048年的游戏代码,但我被卡住了向上/向下移动的部分。例如,如果我有一个这样的列表:
2 0 2 4
0 8 2 4
4 4 2 0
0 4 0 2
我想把我的数字往上移动,所以我写了这样的东西:
2 8 2 4
4 4 2 4
0 4 2 2
0 0 0 0
我都不知道怎么开始,有人能给我点建议吗?我试过这个,但它只适用于一个单位矩阵:
new_matrix = []
for line in matrix:
for pos, element in enumerate(line):
if element != 0:
new_matrix.append(element)
line[pos] = 0
list.clear(matrix[0])
matrix[0] = new_matrix
return (matrix)
您可以遍历列表,检查哪个索引包含0,假设(n
)然后将下一个元素的值赋给n
的第一个索引,并使下一个元素的n
的第一个索引0
:
A = [[1,0,2,1],[0,1,3,4],[4,5,1,0],[0,3,0,1]]
length = len(A)
for i, elem in enumerate(A):
for j, item in enumerate(elem):
if item == 0 and i + 1 < length:
A[i][j] = A[i+1][j]
A[i+1][j] = 0
print(A)
打印:
[[1, 1, 2, 1], [4, 5, 3, 4], [0, 3, 1, 1], [0, 0, 0, 0]]
当前示例:
>>> A
[[2, 0, 2, 4],
[0, 8, 2, 4],
[4, 4, 2, 0],
[0, 4, 0, 2]]
>>> for i, elem in enumerate(A):
for j, item in enumerate(elem):
if item == 0 and i + 1 < length:
A[i][j] = A[i+1][j]
A[i+1][j] = 0
>>> A
[[2, 8, 2, 4],
[4, 4, 2, 4],
[0, 4, 2, 2],
[0, 0, 0, 0]]