假设我有一个嵌套列表,例如:
a = [[4,5,7],[3,5,7],[5,8,0]]
我想将内部列表z=[0,0,0]
插入列表a
中的特定位置。位置由列表调用索引确定。
所以如果索引列表是:
index = [2,4,5]
结果将z
插入位置2,4和5的a
。结果列表将是:
a_insert = [[[4,5,7],[3,5,7],[0,0,0],[5,8,0],[0,0,0],[0,0,0]]
2 4 5
^ ^ ^
现在,列表[0,0,0]
已插入列表index
指定的位置。
天真的尝试是,
for ind in index:
c = a.insert(ind,z)
哪个不起作用。有人可以提出解决方案吗?
答案 0 :(得分:1)
您的代码似乎在这里工作得很好。
In [1]: a = [[4,5,7],[3,5,7],[5,8,0]]
In [2]: z = [0,0,0]
In [3]: index = [2,4,5]
In [4]: for ind in index:
...: a.insert(ind, z)
In [5]: a
Out[5]: [[4, 5, 7], [3, 5, 7], [0, 0, 0], [5, 8, 0], [0, 0, 0], [0, 0, 0]]
我注意到您的最后一行尝试插入列表b
。这可能是一个错字,因为您之前提到了a
列表吗?
修改强>
您在原始帖子中的更新代码段现在是:
for ind in index:
c = a.insert(ind,z)
在此类操作之后, c
始终为None
。但是,z
会按照帖子描述的方式插入a
,a
的内容将会就地更新。
这是因为insert
直接修改了给定的列表,并且没有返回任何值(None
除外)。
也许您希望保留原始列表a
,并创建一个新列表c
,并插入值?在这种情况下,一个简单的解决方案如下:
c = a[:] # Create a shallow copy of a
for ind in index:
c.insert(ind, z)
# a is now [[4, 5, 7], [3, 5, 7], [5, 8, 0]]
# c is now [[4, 5, 7], [3, 5, 7], [0, 0, 0], [5, 8, 0], [0, 0, 0], [0, 0, 0]]