問題描述
當小伙伴們愉快地用 Python2 中 list 的 sort() 方法的 cmp 參數排序時:
- nums = [1, 3, 2, 4]
- nums.sort(cmp=lambda a, b: a - b)
- print(nums) # [1, 2, 3, 4]
- Traceback (most recent call last):
- File "temp.py", line 2, in
- nums.sort(cmp=lambda a, b: a - b)
- TypeError: 'cmp' is an invalid keyword argument for this function
找不到 cmp 參數?WTF?還怎麼愉快玩耍?
原因分析
馬上去看官方文檔,Python2 下的 sort():
- sort(cmp=None, key=None, reverse=False)
- sort(*, key=None, reverse=None)
解決方法
為了照顧到廣大 cmp 用戶的心情,Python3 還是留了一條活路的,用就是 functools.cmp_to_key() 來曲線救國啦,廢話不多說,直接上代碼:
如果是使用 sorted 函數的話, 則可以如下:
Reference
* Data Structures; Python 2.7.13 documentation
* Built-in Types; Python 3.6.1 documentation
* Sorting HOW TO; Python 3.6.1 documentation
* functools — Higher-order functions and operations ...ts; Python 3.6.1 documentation
沒有留言:
張貼留言