Sorting by arbitrary lambda

后端 未结 6 1053
臣服心动
臣服心动 2020-12-15 14:58

How can I sort a list by a key described by an arbitrary function? For example, if I have:

mylist = [[\"quux\", 1, \"a\"], [\"bar\", 0, \"b\"]]
6条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-15 15:47

    Sort and itemgetter is the fastest.

    >>> import operator
    >>> import timeit
    
    >>> mylist = [["quux", 1, "a"], ["bar", 0, "b"]]
    >>> t1 = timeit.Timer(lambda: mylist.sort(key=lambda x: x[1]))
    >>> t1.timeit()
    1.6330803055632404
    
    >>> t2 = timeit.Timer(lambda: mylist.sort(key=operator.itemgetter(1)))
    >>> t2.timeit()
    1.3985503043467773
    
    >>> t3 = timeit.Timer(lambda: sorted(mylist, key=operator.itemgetter(1)))
    >>> t3.timeit()
    2.6329514733833292
    
    >>> t4 = timeit.Timer(lambda: sorted(mylist, key=lambda x: x[1]))
    >>> t4.timeit()
    2.9197154810598533
    

提交回复
热议问题