python - 将子列表放置到其他子列表中

标签 python python-3.x list sublist tetris

我想将一个列表复制到另一个列表:

list1= 
[[0,0,1,0,0],
 [0,1,0,0,0],
 [0,1,0,0,0],
 [0,1,0,0,0],
 [0,1,0,0,0]]
list2=
 [[2,2],
  [2,0],
  [2,0]]

如果你看一下,会列出两个看起来像俄罗斯方 block “L”的东西。我的目标是将这个“L”部分复制到列表之一,以便该部分通过在部分位置写入 2 来更改列表一。所以复制后的 list1 看起来像:

list1= 
[[2,2,1,0,0],
 [2,1,0,0,0],
 [2,1,0,0,0],
 [0,1,0,0,0],
 [0,1,0,0,0]]

或者

list1= 
[[0,0,1,0,0],
 [0,1,0,0,0],
 [0,1,2,2,0],
 [0,1,2,0,0],
 [0,1,2,0,0]]

等等。

由于我需要放置更多零件(只有一个解决方案,如拼图),我正在考虑使用递归函数。

list1= [[0,0,0,0],
        [0,0,0,0],
        [0,0,1,0]],
list2= [[2,2],
        [2,0]],
list3= [[3,3],
        [3,0],
        [3,0]]
list4= [[4,4],
        [0,4],
        [0,4]]

列表 1 应如下所示:

list1= [[3,3,4,4],
        [3,2,2,4],
        [3,2,1,4]]

它需要自动工作。 有任何想法吗?

最佳答案

尝试这种方式(对 list1 具有破坏性):

dx, dy = 0, 0
for x, sub2 in enumerate(list2):
  for y, e in enumerate(sub2):
    if e != 0: list1[x+dx][y+dy] = e

dxdy 为您提供转变,注意索引限制

要查看输出,dx, dy = 2, 2:

for line in list1:
  print (line)

# [0, 0, 1, 0, 0]
# [0, 1, 0, 0, 0]
# [0, 1, 2, 2, 0]
# [0, 1, 2, 0, 0]
# [0, 1, 2, 0, 0]

<小时/> 要重用代码,请定义一个方法:

def move(matrix, piece, dx=0, dy=0):
  for x, line in enumerate(piece):
    for y, e in enumerate(line):
      if e != 0: matrix[x+dx][y+dy] = e
  return matrix

然后根据您所做的 Action 进行调用:

list1= [[0,0,0,0], [0,0,0,0], [0,0,1,0]]
list2= [[2,2], [2,0]]
list3= [[3,3], [3,0], [3,0]]
list4= [[4,4],[0,4],[0,4]]

move(list1, list2, 1, 1)
move(list1, list3)
move(list1, list4, 0, 2)

调用后的最终结果是:

for line in list1:
  print (line)

# [3, 3, 4, 4]
# [3, 2, 2, 4]
# [3, 2, 1, 4]

关于python - 将子列表放置到其他子列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53677124/

相关文章:

python - 在 scipy.stats.kruskal 中使用类似于 R cran kruskal.test 的组

python - 如何在 sqlalchemy 中使用 psycopg2.extras?

python-3.x - 构造无补的幂集

python - 有没有一种Python式的方法来排列列表的列表?

python - 如何对 2D 依赖表进行排序/排序

python - 如何让完美幂算法更高效?

javascript - 通过Websockets从Python Flask服务器不断向客户端发送数据

python - 无法使用 Python 产生正确的值

arrays - 如何检查 groovy 数组/哈希/集合/列表中的元素?

list - 从 HashMap 列表中提取值 Clojure