2016-06-27 1 views
0

数字を挿入する際にソートされたリストを維持するためにbisectモジュールを使用しています。 私は9, 2, 5という3つの数字をこの順番で挿入するつもりです。 このリストの最後の状態は明らかに[2, 5, 9]ですが、数字がこのリストに挿入されるインデックスリストを見つけることができます。このリストの場合は[1, 2, 0]となります。だから私が必要とするリストは、ソートが起こった後のインデックス[0,1,2]です。これは、各挿入にbisectが起こっているので、方法が見つからないのです。私はちょうどkey機能をsortedの機能と並べ替えることができますが、私は複雑さを増やしたくありません。だから私の質問はこれはbisectモジュールで達成可能ですか?ここで Bisectは挿入されたアイテムのインデックスを保持します

は、私が使用するコードです

import bisect 

lst = [] 

bisect.insort(lst, 9) 
bisect.insort(lst, 2) 
bisect.insort(lst, 5) 

print lst 

編集:もう一つの例は以下のようになり、私はいくつかの空のリストに番号4、7、1、2、9を挿入するつもりです。ソートした後

[4, 7, 1, 2, 9] 
# indexes [0, 1, 2, 3, 4], typical enumeration 

(のは、最初の私はすでにリスト中の番号を持っていることを、二分なしと仮定しましょう)、

[1, 2, 4, 7, 9] 
# now the index list [2, 3, 0, 1, 4] 

は、それが複雑さを増すことなく二分で行うことができます。

注:挿入順序は任意ではありません。それは、私がbisectでインデックスを使用しようとする理由です。

+0

何ですか?私はあなたが意味することを理解していません。各挿入が要素の位置を変更する可能性がある場合、記述しているものは存在しません。それぞれの挿入に必要なインデックスを定義する必要があります。あなたは値が挿入されたindecesのシーケンスをしたいですか?そして、これは、「0」(数字「9」がインデックス「0」に挿入された)、「0」(数字「2」が「0」に挿入された)、「1」(数字「5」が位置に挿入された) 「1」)。これがあなたが意味するものでない場合は、ちょうどほんの少し大きい例(3つではなく5つの要素)を使って、正確に何をしたいかを説明してください。 – Bakuriu

+0

@Bakuriuインデックスは、実際にはソートされていないリストのインデックスです。インデックスリストではなく、実際のリストの値を使ってインデックスをソートする必要があります。私はbisectでこれを達成しようとしています。 –

答えて

0

insortは、アイテムがどのような順序で挿入されたか分かりません。そのロジックを自分で追加する必要があります。そうするための一つの方法は、値とインデックスからなる2つの要素を挿入することができます

bisect.insort(lst, (9, 0)) 
bisect.insort(lst, (2, 1)) 
bisect.insort(lst, (5, 2)) 

あなたがオブジェクトを追加しているとして、インデックス、自分のトラックを保持する必要があるだろうが、シーケンスが最初にソートされているよう最初の項目、次に次の項目などでは、これは余分な労力を要せずに適切にソートされます。

+0

タプルは一番左の要素を使ってソートされていますか? (私はタプルのリストを意味します) –

+0

@MaxPythoneはい、それは最後の文の意味です。 – glibdud

関連する問題