我想知道是否有办法使用相同的索引一次将多个变量插入到列表中。例如,假设我们有一个
列表 [a, b, c]
和
[0,1,2,3,4]
我希望插入第一个列表,以便最终结果为
[a, 0, 1, b, 2, 3, c, 4]
但如果我打算单独使用list.insert(pos, value)
并使用[0, 2, 4]
的位置,则后续使用的位置将变为无效,因为它与5个元素的旧列表相关而不是6个元素
有什么建议吗?
答案 0 :(得分:3)
一个简单的选择是添加以具有最高值的位置开头的项目,然后继续使用第二个最高值等。
通过这种方式,您可以使用原始方法,而不会出现任何"旧/新位置问题"
答案 1 :(得分:2)
list_a = [0,1,2,3,4]
list_b = ["a", "b", "c"]
pos = [0, 2, 4]
assert(len(list_b) == len(pos))
acc = 0
for i in range(len(list_b)):
list_a.insert(pos[i]+acc, list_b[i])
acc += 1
print(list_a)
[' a',0,1,' b',2,3,' c',4]
答案 2 :(得分:2)
不使用列表理解的一种方法:
>>> a = [0,1,2,3,4]
>>> b = ['a', 'b', 'c']
>>> ind = [0, 2, 4]
>>> d = dict(zip(ind, b))
>>> [t for k in [(d.get(i),j) for i,j in enumerate(a)] for t in k if t is not None]
['a', 0, 1, 'b', 2, 3, 'c', 4]
答案 3 :(得分:0)
另一种选择,不使用索引累加器,但仍然要求索引按升序排列。
newObjects = ["a", "b", "c"]
newObjectIndices = [0, 2, 4]
existingList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for index, obj in zip(reversed(newObjectIndices), reversed(newObjects)):
existingList.insert(index, obj)
print(existingList) # ['a', 0, 1, 'b', 2, 3, 'c', 4, 5, 6, 7, 8, 9]
如果无法保证升序,那么排序是一种可能的解决方案。
newObjects = ["b", "a", "c"]
newObjectIndices = [2, 0, 4]
existingList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for index, obj in reversed(sorted( zip(newObjectIndices, newObjects), key=lambda tup: tup[0])):
existingList.insert(index, obj)
print(existingList) # ['a', 0, 1, 'b', 2, 3, 'c', 4, 5, 6, 7, 8, 9]