2017-01-27 3 views
1

У меня есть два списка, которые мне нужно синхронизировать друг с другом. Пример ниже - очень урезанная версия полного приложения.Приращение каждого элемента после вставленного элемента в список

list_1 содержит данные, list_2 содержит значения индекса.

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

Теперь я хочу .insert() в list_1 - в любой индекс - и сохранить список два в синхронизации. Это означает, что если вставить элемент с индексом 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. Изменение для этого решения с двумя списками было бы невероятно трудоемким на данный момент.

+4

Не 'list_2' всегда просто' list (range (len (list_1))) ' –

ответ

1

Это пахнет 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, они увидят изменения.

Смежные вопросы