我想将一个列表复制到另一个列表:
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]]
如果您查看它,列出两个看起来像俄罗斯方块“ 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
dx
和dy
为您提供移位,请注意索引限制。要查看输出,
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
然后根据您的举动致电:
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/