0

我创建mylist的内容如下:

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

当我运行排序功能时:

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

它对第二列的列表进行排序,但仅按第一个整数

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

如何让它按第二列中的整数排序,以便顺序为:

[('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
>>> 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

您只需要添加浮点转换:

>>> 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 回答
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 回答