这个问题是this问题的扩展。你知道吗
我用列表列表来表示一个二维数组,L
,比如说:
[ [1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4] ]
对于一个给定的子列表,比如说[9, 99]
,我想用这个sublist
替换“2-D”列表中的一个特定子列表,使用如下直观的方法:
L[1][0:2] = sublist
# which updates `L` to:
[ [1, 2, 3, 4],
[1, 9, 99, 4],
[1, 2, 3, 4],
[1, 2, 3, 4] ] # not in this format, but written like this for clarity
这适用于水平替换,但不适用于垂直替换,因为我们不能像这样分割到单独的列表:L[0:2][0]
。如果我有使用这个切片系统,我可以transpose ^{
复制L[0:2][0]
并获得此输出的有效方法是什么?
[ [1, 2, 3, 4],
[1, 9, 3, 4],
[1, 99, 3, 4],
[1, 2, 3, 4] ]
注:假设len(sublist) <= len(L)
,用于垂直替换(这是本问题的重点)。你知道吗
循环方法:
转置/切片/转置方法:
我把“禁止转置”的说法看过头了。这是使用转置,改变,转置方法与切片,这是Q不想要的。这是这个问题标题的答案,所以我决定把它留给以后的人们去搜索,然后在这个问题上绊倒:
输出:
计时4x4列表,2个替换:
输出:
对于4x4列表,使用ZIPPing(transpose/slice/transpose)的方法大约需要60%的时间。你知道吗
更大的列表1000x1000和~70个替换元素:
输出:
循环获胜。感谢@Sphinx的评论
相关问题 更多 >
编程相关推荐