2017-01-27 8 views
1

私は、互いに同期しておく必要がある2つのリストを持っています。以下の例は、完全なアプリケーションの非常に古いバージョンです。リストに挿入されたアイテムの後ろのすべての要素をインクリメント

list_1には、インデックス値を含むlist_2が含まれています。いずれの指標で - -

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

は今、私はlist_1.insert()したいと同期して、リスト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を制御するために使用されます。この2つのリストソリューションの変更は、この時点で非常に時間がかかるでしょう。

+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への参照があり、変更が反映されます。

関連する問題