在lis中插入项后增加每个元素

2024-04-29 15:49:21 发布

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

我有两个列表需要保持同步。下面的示例是完整应用程序的一个非常精简的版本。你知道吗

list_1包含数据,list_2包含索引值。你知道吗

list_1 = ['item1', 'item2', 'item3', 'item4']
list_2 = [0, 1, 2, 3]

现在我想.insert()转换成list_1-在任何索引处-并保持列表2同步。这意味着如果我在索引1处插入一个元素,它看起来像这样:

list_1 = ['item1', 'new_item!', 'item2', 'item3', 'item4']

我知道这个例子中的索引是1,所以我可以在list_2的适当位置插入它

list_2 = [0, 1, 1, 2, 3]
#            ^----- Newly inserted index

我的问题是,如何有效地更新插入值之后的每个元素,使其增量为1?你知道吗


我意识到这对于本例来说是非常基本和不必要的,但是对于完整的应用程序,这两个列表是必需的,索引的list_2用于控制PyQt UI。在这一点上,更改这个两个列表的解决方案将非常耗时。你知道吗


Tags: 数据版本应用程序元素示例列表newitem
1条回答
网友
1楼 · 发布于 2024-04-29 15:49:21

这闻起来像是XY problem,但无论如何。。。你知道吗

你可以这样变异list_2

list_2 = [0, 1, 2, 3]

val = 1
idx = 1

list_2.insert(idx, val)
print(list_2)

list_2[idx+1:] = [u+1 for u in list_2[idx+1:]]
print(list_2)

输出

[0, 1, 1, 2, 3]
[0, 1, 2, 3, 4]

因为我们使用切片分配,所以我们改变了原始的list_2对象,而不是替换它,所以如果任何其他对象引用了list_2,它们就会看到更改。你知道吗

相关问题 更多 >