Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中对元组列表进行排序,其中元组是列表_Python_List_Sorting_Tuples - Fatal编程技术网

在Python中对元组列表进行排序,其中元组是列表

在Python中对元组列表进行排序,其中元组是列表,python,list,sorting,tuples,Python,List,Sorting,Tuples,几乎有人问过类似的问题,但我的问题略有不同。假设我有一个流动列表: my_list = [('a', [0.2, 0.28, 0.3]), ('b', [-0.09, 0.37, 0.4])] 我试图根据元组的第二个元素,即0.28和0.37降序,对这个列表进行排序。这是我到目前为止所知道的,但这是不对的 import operator my_list.sort(key = operator.itemgetter(1), reverse = True) print(my_list) [('a'

几乎有人问过类似的问题,但我的问题略有不同。假设我有一个流动列表:

my_list = [('a', [0.2, 0.28, 0.3]), ('b', [-0.09, 0.37, 0.4])]
我试图根据元组的第二个元素,即0.28和0.37降序,对这个列表进行排序。这是我到目前为止所知道的,但这是不对的

import operator
my_list.sort(key = operator.itemgetter(1), reverse = True)
print(my_list)
[('a', [0.2, 0.28, 0.3]), ('b', [-0.09, 0.37, 0.4])]
我可以想出一种效率不高的方法,但我正在处理一个大型数据集,并试图尽可能提高效率。谢谢

您可以:

my_list.sort(key=lambda x: x[1][1], reverse=True)
你为什么得到你的输出

operator.itemgetter1只是作为列表的每个元组的第二个元素,而不是该列表的第二个元素。您向排序函数传递了错误的键

您必须索引上面代码中的两倍。首先索引以获取元组内的列表,然后索引列表以获取列表的第二个元素。

例如,列表[0.2,0.28,0.3]是元组“a”的元素1,[0.2,0.28,0.3]位于排序的顶层。要基于0.28进行排序的是其中的元素1;因此,您希望根据索引对数据进行排序,如[1][1]。operator.itemgetter不会执行类似的多个索引步骤,但您可以手动定义它:

my_list.sort(key=lambda element:element[1][1], reverse=True)

您没有按元组的第二个元素进行排序。您正在按元组的第二个元素的第二个元素进行排序。只需使用my_list.sortkey=lambda x:x[1][1]您是要对整个列表还是每个子列表中的元组进行排序?元组本身不能排序,它们是不可变的。