繁体   English   中英

在Python中的列表列表中对float进行排序?

[英]Sort float in list of lists in Python?

我试图根据每个嵌套列表的最后一个值对嵌套列表结构进行排序。 我的列表看起来像这样:

li = [['a1', 1, 1.56], ['b3', '6', 9.28], ['c2', 1, 6.25]...]

我想要的输出是:

['b3', '6', 9.28]
['c2', 1, 6.25]
['a1', 1, 1.56]

我尝试了一些使用itemgetter解决方案:

 rank_list = [i.sort(key=itemgetter(2)) for i in li]

我究竟做错了什么? 有没有更好的方法来排序嵌套列表? 我得到一个AttributeError: 'str' object has no attribute 'sort' 谢谢您的帮助。

你接近你的一种方法,但你真正想要的是:

li.sort(key = itemgetter(2), reverse = True)
rank_list = sorted(li, key=itemgetter(2))

字符串无法排序,这就是AttributeError: 'str' object has no attribute 'sort'想要告诉你。

您想要对list li进行排序

 rank_list = sorted(li, key=itemgetter(2)) # to obtain a sorted copy of li
 # or just sort in place:
 li.sort(key=itemgetter(2))

无论你做什么,它都不是你发布的:

>>> rank_list = [i.sort(key=itemgetter(2)) for i in li]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

让我们澄清一下我们对这个问题的看法。

[i.so​​rt(key = itemgetter(2))for i in li]

这意味着“获取每个子列表并对其元素(列表和两个字符串)进行排序,使用每个子项的第2项作为键;累积来自这些操作的返回值列表”。 子列表的元素是整数和字符串; int根本不是序列(因此你无法从中获取一个项目),而且你的一些字符串太短(当我尝试你的例子时,我没有得到你引用的错误,而是“IndexError:字符串索引超出范围“,如预期的那样)。 即使这确实有效,您也只会得到一个None值列表,因为列表上的.sort就地对列表进行排序并返回None

你想要的是“给我列出这个列表清单的每个元素的2个版本”。 这是sorted(li, key=itemgetter(2)) 列表列表是您要排序的内容,因此您将传递给排序函数。 您希望排序提供新值而不会影响就地,因此您使用自由函数sorted

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM