を可能にすると、私はこのようなリストを持っているとしましょうランク番号のリスト、ネクタイ
ここnewIndexVertList = [0, 1, 2, 2, 1, 4, 5, 5, 4, 3, 7, 6]
、変換が基づいています元のリストの昇順の番号の位置。したがって、新しいリスト番号がロジックに基づいて置き換えられます。
以下0 --> 0 0th position in sorted list
1 --> 1 1st position in sorted list
2 --> 2 2nd position in sorted list
3 --> 3 3rd position in sorted list
20 --> 4 4th position in sorted list
21 --> 5 5th position in sorted list
22 --> 6 6th position in sorted list
23 --> 7 7th position in sorted list
は、これを達成するための私のコードです:私のコードの問題です
c = 0
for i in xrange(len(newIndexVertList)):
if c < newIndexVertList[i]:
newIndexVertList[i] = c
c += 1
continue
elif c == newIndexVertList[i]:
c += 1
continue
else:
continue
# actual output: [0, 1, 2, 2, 1, 3, 4, 5, 6, 3, 7, 8]
# expected output: [0, 1, 2, 2, 1, 4, 5, 5, 4, 3, 7, 6]
何?これを達成するためのエレガントな方法は何ですか?
私の頂点リストは100kの範囲にあるので、私は最も速い実行を探しています。
'インデックスが= [ソート(リスト(集合(頂点)))指数(V) for v in vertices]は、OPが探しているものですと思います。私は質問の言葉遣いが改善されている必要があります同意 – zinfandel
さて、zinfandel答えは動作しますが、それは巨大な時間複雑さを持っています。ソート、リストへの変換、ソートされたリスト内での 'v'の設定+変換を行う頂点の反復ごとにindex(v)'が計算されます –
@MoinuddinQuadri Ah、読みやすくなる一方、最速の解決策ではないかもしれません。私の頂点リストは100kの範囲にあるので、私は最も速い実行を探しているはずです。あなたの答えはより速いでしょうか? – RedForty