用类型转换对列表中的列表进行排序

15 投票
2 回答
15144 浏览
提问于 2025-04-16 07:56

我知道类似的问题已经被问过好几次了。我也知道怎么用搜索功能,但它还是没用。

下面是我的问题情况。我有一个包含字符串的列表的列表。其中一列包含的字符串实际上代表浮点数值。而我想要根据这一列进行排序。问题是,Python似乎忽略了这些条目的负号(-)。所以一个示例列表是:

[[blaa, '0.3', bli], [bla, '0.1', blub], [bla, '-0.2', blub]]

排序后变成这样:

[[bla, '0.1', blub], [bla, '-0.2', blub], [blaa, '0.3', bli]]

而不是应该是这样的:

[[bla, '-0.2', blub],[bla, '0.1', blub], [blaa, '0.3', bli]]

到目前为止,我尝试过:

  • 将第二列转换为浮点数,然后根据这一列排序

像这样:

for i in mylist:
  i[1] = float(i[1])    

mylist.sort(key=lambda x: x[1])

或者用

for i in mylist:
  i[1] = float(i[1]) 

mylist.sort(key=operator.itemgetter(1))
  • 我还尝试定义自己的比较函数:

像这样:

mylist.sort(cmp=lambda x,y: cmp(float(x), float(y)), key=operator.itemgetter(1))

还有其他组合方法,使用 sorted 也试过,但都没有成功,负号每次都被忽略。我该怎么解决这个问题?

[编辑] 我也尝试过Ignacio的建议。我得提一下,我必须使用Python 2.5。

2 个回答

2

我的运行得很好,Python 3.1.2:

>>> l=[['', '0.3', ''], ['', '0.1', ''], ['', '-0.2', '']]
>>> sorted(l,key=lambda x:float(x[1]))
[['', '-0.2', ''], ['', '0.1', ''], ['', '0.3', '']]

还有 2.6.5:

>>> l=[['', '0.3', ''], ['', '0.1', ''], ['', '-0.2', '']]
>>> sorted(l,key=lambda x:float(x[1]))
[['', '-0.2', ''], ['', '0.1', ''], ['', '0.3', '']]
19
l = [["blaa", "0.3", "bli"], ["bla", "0.1", "blub"], ["bla", "-0.2", "blub"]]

l.sort(key=lambda x: float(x[1]))

>>> [['bla', '-0.2', 'blub'], ['bla', '0.1', 'blub'], ['blaa', '0.3', 'bli']]

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答