把一个列表复制到另一个列表的一部分,这是一种最为恶作剧的方式

2024-07-05 15:46:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很大的列表,目前只包含0。我还有一个小的列表,我想把它复制到大列表中的某些位置。我要替换原始值。到目前为止我发现的唯一方法是:

start = (startrow, startcol)

for i in range( start[0], start[0] + len(shortlist) ):
  for j in range( start[1], start[1] + len(shortlist[0]) ):
    longlist[i][j] = shortlist[i-start[0]][j-start[1]]

不过,这感觉不是很像python—据我所知,列表理解通常比循环更受欢迎,尽管我在几个小时的搜索中没有找到它,但可能有一些函数可以更优雅地实现这一点。有比我更好的解决办法吗?你知道吗

编辑:我也对NumPy解决方案感兴趣,甚至可能比普通的Python解决方案更感兴趣。你知道吗


Tags: 方法in列表forlenrange解决方案start
2条回答

可以使用切片替换来替换内环:

start = (startrow, startcol)

for i, elements in enumerate(shortlist, start[0]):
    longlist[i][start[1]:start[1] + len(elements)] = elements

根据您要执行的操作,可以使用numpy-数组:

large[startrow:startrow + small.shape[0], startcol:startcol + small.shape[1]] = small

您现在所做的似乎是错误的,您首先从start[0]start[1]开始ij,但是在分配值时,您再次添加了start[0]start[1]。我认为这不是你想要的。你知道吗

你缩进的可能是-

for i,x in enumerate(shortlist):
    for j,y in enumerate(x):
            longlist[i+start[0]][j+start[1]] = y

对我来说,这似乎已经够Python的了,试图用列表理解来做这件事会让人看不懂,这在我看来不是Python的。你知道吗

示例/演示-

>>> shortlist = [[1,2],[3,4]]
>>> longlist = [[0,0,0,0],[0,0,0,0],[0,0,0,0]]
>>> start = 1,1
>>> for i,x in enumerate(shortlist):
...     for j,y in enumerate(x):
...             longlist[i+start[0]][j+start[1]] = y
...
>>> longlist
[[0, 0, 0, 0], [0, 1, 2, 0], [0, 3, 4, 0]]

相关问题 更多 >