2

次のリストがあります。

my_list = ['name.13','name.1', 'name.2','name.4', 'name.32']

そして、このようにリストを並べ替えて順番に印刷したいと思います

name.1
name.2
name.4
name.13
name.32

私がこれまでに試したことは次のとおりです。

print sorted(my_list)

name.1
name.13
name.2
name.32
name.4

sorted() コマンドは明らかに文字列をアルファベット順に扱います。最初に検出した後、数値でソートしたほうがよいでしょう.か?

うまく並べ替えるいい方法ありませんか?どのようなアプローチを取るのが最も効率的でしょうか? タプルのリストがあり、タプルの 2 番目の要素を使用して並べ替えたい場合、これをどのように適用しますか? 例えば:

tuple_list = [('i','name.2'),('t','name.13'),('s','name.32'),('l','name.1'),('s','name.4')]

print tuple_list
'l','name.1'
'i','name.2'
's','name.4'
't','name.13'
's','name.32'

ご協力いただきありがとうございます。質問を改善/明確化できると思われる場合は、いつものようにコメントしてください。

アレックス

4

4 に答える 4

4

更新された回答

natsortバージョン 4.0.0 では、これはオプションを指定しなくてもそのまま使用できます。

>>> import natsort
>>> my_list = ['name.13','name.1', 'name.2','name.4', 'name.32']
>>> natsort.natsorted(my_list)
['name.1','name.2', 'name.4','name.13', 'name.32']

natsort < 4.0.0 の古い回答

外部パッケージに反対しない場合は、natsortパッケージ (バージョン >= 3.0.0)を試してください。

>>> import natsort
>>> my_list = ['name.13','name.1', 'name.2','name.4', 'name.32']
>>> natsort.natsorted(my_list, number_type=int)
['name.1','name.2', 'name.4','name.13', 'name.32']

デフォルトでは浮動小数点数が検索され、小数点によってこれらの数値がすべて浮動小数点数として解釈される ため、このnumber_type場合は引数が必要です。natsort


完全な開示:私はnatsort著者です。

于 2013-07-12T22:26:17.480 に答える
3

これを試して:

sorted(my_list, key=lambda x: int(x.split('.')[1]))

デモ:

>>> my_list = ['name.13','name.1', 'name.2','name.4', 'name.32']
>>> sorted(my_list, key=lambda x: int(x.split('.')[1]))
['name.1', 'name.2', 'name.4', 'name.13', 'name.32']
>>> 

それをタプルに拡張し、

sorted(tuple_list, key = lambda x: int(x[1].split('.')[1]))

デモ:

>>> sorted(tuple_list, key = lambda x: int(x[1].split('.')[1]))
[('l', 'name.1'), ('i', 'name.2'), ('s', 'name.4'), ('t', 'name.13'), ('s', 'name.32')]
于 2013-07-12T22:07:55.167 に答える