How does Python sort a list of tuples?

后端 未结 5 1704
广开言路
广开言路 2020-12-08 18:33

Empirically, it seems that Python\'s default list sorter, when passed a list of tuples, will sort by the first element in each tuple. Is that correct? If not, what\'s the ri

相关标签:
5条回答
  • 2020-12-08 18:46

    Try using the internal list sort method and pass a lambda. If your tuples first element is a integer, this should work.

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

    You can use any callable for the compare function, not necessarily a lambda. However it needs to return -1 (less than), 0 (equal) or 1 (greater than).

    0 讨论(0)
  • 2020-12-08 18:46

    Check out "Devin Jeanpierre" answer to this question sort-a-dictionary-in-python-by-the-value where he says to use a tuple and shows how to sort by the second value

    0 讨论(0)
  • 2020-12-08 18:49

    No, tuples are sequence types just like strings. They are sorted the same, by comparing each element in turn:

    >>> 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)]
    

    The three zeroes are only there to show that something other than the first element must be getting inspected.

    0 讨论(0)
  • 2020-12-08 18:53

    Yes, this is the default. In fact, this is the basis of the classic "DSU" (Decorate-Sort-Undecorate) idiom in Python. See Code Like a Pythonista.

    0 讨论(0)
  • 2020-12-08 18:56

    It automatically sorts a list of tuples by the first elements in the tuples, then by the second elements and so on tuple([1,2,3]) will go before tuple([1,2,4]). If you want to override this behaviour pass a callable as the second argument to the sort method. This callable should return 1, -1, 0.

    0 讨论(0)
提交回复
热议问题