Python如何sorting元组列表?

在经验上,似乎Python的默认列表sorting器,当传递一个元组列表时,将按每个元组中的第一个元素进行sorting。 那是对的吗? 如果不是,按照元素的第一个元素对元组列表进行sorting的正确方法是什么?

它自动按元组中的第一个元素对元组列表进行sorting,然后由元组([1,2,3])中的第二个元素将在元组([1,2,4])之前进行sorting。 如果你想覆盖这个行为,那么传递一个可调用的方法作为sorting方法的第二个参数。 这个可调用函数应该返回1,-1,0。

是的,这是默认的。 事实上,这是Python中经典的“DSU”(Decorate-Sort-Undecorate)成语的基础。 像Pythonista一样查看代码 。

不,元组就像string一样是序列types 。 它们按照相同的顺序进行sorting:

 >>> import random >>> sorted([(0,0,0,int(random.getrandbits(4))) for x in xrange(10)]) [(0, 0, 0, 0), (0, 0, 0, 4), (0, 0, 0, 5), (0, 0, 0, 7), (0, 0, 0, 8), (0, 0, 0, 9), (0, 0, 0, 12), (0, 0, 0, 12), (0, 0, 0, 12), (0, 0, 0, 14)] 

三个零都只是表明除了第一个元素之外的东西必须被检查。

尝试使用内部列表sorting方法,并传递一个lambda。 如果你的元组的第一个元素是一个整数,这应该工作。

 # l is the list of tuples l.sort(lambda x,y: xy) 

您可以使用任何可调用的比较函数,不一定是lambda。 但是它需要返回-1(小于),0(等于)或1(大于)。

检查出“Devin Jeanpierre”这个问题的答案在python-by-the-value中的字典中 ,他说要使用一个元组,并显示如何按第二个值sorting