2016-05-23 10 views
4

同じインデックスを使用して複数の変数を同時にリストに挿入する方法があるのだろうかと思っていました。だから、例えば、我々は一度に複数の値をリストに挿入する方法

[a, b, c]

[0,1,2,3,4]

のリストを持っていると私は最終的な結果は、

[a, 0, 1, b, 2, 3, c, 4]であるように、最初のリストを挿入したいとしましょう

しかし、もし私がそれを個別に行うつもりなら、list.insert(pos, value)を使用し、[0, 2, 4]の位置を使用すると、使用された後続の位置は、6の代わりに5つの要素の古いリストに関連していたので無効になります。

提案がありますか?

答えて

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]

+0

これは完全に機能します。ポジションとそれぞれの要素が正しく注文されている場合にのみ機能するということを他の人に思い出させるように、ポジション[3、0、2、4]があれば動作しません。 –

+0

@ Loc-Tranに 'assert'文が追加されました。 – Wentao

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] 
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] 
関連する問題