リストを各項目の桁で並べ替えたい。
例:
myCmpItem = '511'
myList = ['111','222','333','444','555','123']
(some magic)
mySortedList = ['111', '222', '333', '123', '444', '555']
アルゴリズムの仕組み:
- myList の現在のアイテムの各桁を myCmpItem と比較します
- リストの最初の項目は次のようになります。
- 5 と 1 の差は 4
- 1 と 1 の差は 0
- 1 と 1 の差は 0
- これらの 2 つの数値の差は 4 です (桁比較の合計)
- 他のすべてのアイテムについても同じことを行います
- この計算された類似度でリストを並べ替える
多くの for ループを使用してこれをコーディングすることもできますが、実際にはこれを行うためのより高速な方法を探しています。そのようなことをするアルゴリズムはありますか?速い?
その他の制限
- 私の例では、すべてのアイテムの長さは 3 ですが、実際のシナリオでは長さは 25 です。
- すべての項目の長さは同じです。len(myList[x])==25 は常に true です。
- アイテムは、文字列、int、float、またはアルゴリズムにより適したものにすることができます
- 1から5までの数字しかない
バックグラウンド
すべての項目の数字は質問に対する回答であり、特定の回答セットに最も類似した回答セットを見つけたいと考えています。したがって、「123」は、ユーザーが質問 1 = 回答 1、質問 2 = 回答 2、質問 3 = 回答 3 に回答したことを意味します。これらは、合計 25 の質問 (= 25 の長さ) を持つ多肢選択式の質問であり、常に 5 つの異なる質問があります。回答する可能性があります (これらは 1 ~ 5 の数字です)。
PS: これは私が Stackoverflow で行った最初の質問です。よろしくお願いします。すでに何時間もグーグル検索しましたが、解決策が見つからなかったので、ここで質問しました。うまくいくことを願っています。また、英語は私の母国語ではありません。
答え(参加者の皆様、ありがとうございました!)
@larsmans の回答 ( https://stackoverflow.com/a/10790714/511484 ) は、これを合理的な速度で解決する方法を非常によく説明しています。@gnibbler の投稿 ( https://stackoverflow.com/a/10791838/511484 ) を参照してください。他のすべての回答も適切で正しいものでしたが、私はそれを発見しました@larsmans が最良の説明をしてくれました。助けてくれてありがとう!