如何以特定方式操作嵌套列表以产生列表之间的移动效果?

问题描述 投票:0回答:0

假设我有一个 2x2 网格,如下所示:

   A  B  A  A  
   B  C  C  B       
   B  C  C  A       
   B  B  B  B

由列表组成

grid = [["A", "B", "A", "A"],["B","C","C","B"],["B","C","C","A",],["B","B","B","B"]
.

我希望执行 2048 式效果,其中 C 2x2 被删除,替换为 X 以显示空白,然后接下来的动作将是:

  • 空白下方的任何东西都会向上浮动
  • 空白右边的任何东西都会向左浮动

一个例子看起来像

A  B  A  A          A  B  A  A          A  B  A  A
B  X  X  B   ->     B  B  B  B   ->     B  B  B  B
B  X  X  A          B  X  X  B          B  B  X  X
B  B  B  B          B  X  X  B          B  B  X  X

此时另一个2x2的Bs已经形成,应该再次进行操作,直到再也找不到2x2s为止

我对 python 很陌生,所以我认为我的代码不是特别整洁或有效,而且我注意到在第 2 列中的第一个 B 替换第 2 列第 2 列中的 X 之后,我的代码跳过了第 2 行中的 X Col 3,所以我知道我做错了什么。

我写的代码是这样的:

for row, grid_row in enumerate(grid):
    for col, item in enumerate(grid_row):
        if item == "Z":                
            item_col = col
            item_row = row                
            for row, grid_row in enumerate(grid):
                if grid_row[item_col] != "Z" and row >= item_row:
                    grid[item_row][item_col] = grid_row[item_col]
                    grid_row[item_col] = "Z"

请注意,我不能为练习执行任何导入,示例应该使用 n x n 大小的网格,但如果有人知道我如何使我的代码工作和/或工作更整洁,那将是一个巨大的帮助。

python list function indexing slice
© www.soinside.com 2019 - 2024. All rights reserved.