0

私はmylistそれを読んで作成しました:

[('GCK', '3e-12'), ('ist', '6e-30'), ('iso', '5e-15'), ('tig', '5e-77')]

ソート機能を実行すると:

mylist.sort(key=operator.itemgetter(1))

2列目のリストをソートしますが、1番目の整数のみでソートします

[('GCKDGN101ANI4S', '3e-12'), ('isotig13037', '5e-15'), ('isotig14607', '5e-77'), ('isotig03156', '6e-30')]

順序が次のようになるように、2 番目の列の数値全体で並べ替えるにはどうすればよいですか。

[('GCK', '3e-12'), ('ist', '5e-15'), ('tig', '6e-30'), ('iso', '5e-77')]
4

4 に答える 4

4

'3e-12'は数値ではなく、文字列です。文字列は各文字でソートされます。

数値を並べ替えたいので、最初に変換する必要があります。元のデータのいずれか:

old = [('GCK', '3e-12'), ('ist', '6e-30'), ('iso', '5e-15'), ('tig', '5e-77')]
new = [(name, float(x)) for name,x in old]
new.sort(key=operator.itemgetter(1))

または並べ替え中にアイテムを変換します。

old.sort(key=lambda elem: float(elem[1]))
于 2011-12-10T13:19:17.407 に答える
1

最初に文字列を数値に変換できます。

import operator

a = [('GCKDGN101ANI4S', '3e-12'), ('isotig13037', '5e-15'), ('isotig14607', '5e-77'), ('isotig03156', '6e-30')]
converted_a = [ (row[0],float(row[1])) for row in a ]
converted_a.sort(key=operator.itemgetter(1), reverse=True)

print converted_a
于 2011-12-10T13:24:38.010 に答える
1
>>> l = [('GCK', '3e-12'), ('ist', '6e-30'), ('iso', '5e-15'), ('tig', '5e-77')]
>>> sorted(l, key=lambda x: float(x[1]), reverse=True)
[('GCK', '3e-12'), ('iso', '5e-15'), ('ist', '6e-30'), ('tig', '5e-77')]
于 2011-12-10T13:19:08.220 に答える
1

float 変換を追加するだけです。

>>> mylist.sort(key=lambda x:float(x[1]), reverse=True)
>>> mylist
[('GCK', '3e-12'), ('iso', '5e-15'), ('ist', '6e-30'), ('tig', '5e-77')]
于 2011-12-10T13:19:29.140 に答える