在2048中进行移位功能

发布于 2021-01-29 16:42:55

让我们说我有一个清单:

board = [2, 4, 0, 2, 8, 4, 4, 8, 0, 2, 0, 0, 4, 0, 2, 2]

并且我已经有一些代码可以使列表显示为:

2 4 0 2
8 4 4 8
0 2 0 0
4 0 2 2

所以我有办法从每行中删除每个0并将其添加回末尾(即使列表中有不同的值),这样板现在看起来像:

2 4 2 0
8 4 4 8
2 0 0 0
4 2 2 0

我想使用循环来执行此操作,而不必单独为每一行编写单独的代码。

您也可以不将初始列表添加到

board = [[2, 4, 0, 2], [8, 4, 4, 8], [0, 2, 0, 0], [4, 0, 2, 2]]

1行的代码为:

board = [2, 0, 0, 2]
k = len(board)
board[:] = (value for value in board if value != 0)
while len(board) < k:
    board.append(0)
print(board)

Output = [2, 2, 0, 0]
关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以使用list.count

    board = [2, 4, 0, 2, 8, 4, 4, 8, 0, 2, 0, 0, 4, 0, 2, 2]
    new_board = [board[i:i+4] for i in range(0, len(board), 4)]
    final_board = [list(filter(None, i))+([0]*i.count(0)) for i in new_board]
    last_board = [i for b in final_board for i in b]
    

    输出:

    [2, 4, 2, 0, 8, 4, 4, 8, 2, 0, 0, 0, 4, 2, 2, 0]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看