私はこのサイトのリストの要素を交換してみましたが、ほとんどの場合、ある要素を別の要素と入れ替えることができます。違うリストスライスを交換するためのエレガントな方法?
ここでは、不等長のスライスの位置を入れ替えようとしています。例のリストについて:
x = [6,2,4,3,4,1,4,5]
私は、以下のフォームなどの一般的でリストや変数の値を交換するために使用さエレガントな方法を期待していた:
x[0:1], x[1:7] = x[1:7], x[0:1]
#Expected output
x = [2, 4, 3, 4, 1, 4, 5, 6]
当然のことながら、それは動作しません、それはx[5:7]
とスワップx[0:4]
:
#Actual output
x = [2, 6, 4, 3, 4, 1, 4, 5]
別の例:最初の2つの要素を入れ替え
#Expected output
x = [1, 4, 4, 6, 2, 4, 3, 5]
私はそれはスワッピングがslice1
の最初の要素がslice2
の最初の要素の前の位置を占めているようなものであることは明らかです願っています。残りは次のとおりです。
これを簡単かつ効率的に行う方法はありますか?
でそれを試してみてください、その '__set_item__'メソッドは以前のスライスの割り当てを追跡し、次のスライスのインデックスを再マップします。これを効率的にする。 O(logN)w.r.t.割り当ての数---索引変換を追跡するための重要でないデータ構造が必要です。 – nickie