の使用に関する他の回答に加えて、bisect.insort
パフォーマンスに満足できない場合は、blist
モジュールを使用してみてくださいbisect
。パフォーマンスが向上するはずです。
従来のlist
挿入の複雑さはですがO(n)
、挿入blist
の複雑さはですO(log(n))
。
また、配列はソートされているようです。その場合、muduleのmerge
関数を使用して、両方の配列が事前にソートされているという事実を利用できます。heapq
このアプローチでは、メモリ内に新しいアレイを作成するため、オーバーヘッドが発生します。このソリューションの時間計算量はO(n+m)
であるのに対し、ソート付きのソリューションはO(n*m)
複雑さ(n要素* m挿入)であるため、検討するオプションになる場合があります。
import heapq
a = [1,2,4,5,6,8,9]
b = [3,4,7,10]
it = heapq.merge(a,b) #iterator consisting of merged elements of a and b
L = list(it) #list made of it
print(L)
出力:
[1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10]
繰り返し値を削除する場合は、groupbyを使用できます。
import heapq
import itertools
a = [1,2,4,5,6,8,9]
b = [3,4,7,10]
it = heapq.merge(a,b) #iterator consisting of merged elements of a and b
it = (k for k,v in itertools.groupby(it))
L = list(it) #list made of it
print(L)
出力:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]