python3cmp
㈠ 關於python3沒有cmp,如何代替的問題
>>>sorted(['bob','Bob','about','Zoo','Credit'],key=str.lower)
['about','bob','Bob','Credit','Zoo']
忽略大小寫的比較,先轉小寫作為鍵值排序
㈡ 在Python 3 中的自定義排序怎麼辦
python3 sorted取消了對cmp的支持。
python3 幫助文檔:
sorted(iterable, key=None, reverse=False)
reverse是一個布爾值。如果設置為True,列表元素將被倒序排列,默認為False
key接受一個函數,這個函數只接受一個元素,默認為None
- my_alphabet = ['a', 'b', 'c']def custom_key(word):
- numbers = [] for letter in word:
- numbers.append(my_alphabet.index(letter)) return numbers# python中的整數列表能夠比較大小# custom_key('cbaba')==[2, 1, 0, 1, 0]x=['cbaba', 'ababa', 'bbaa']
- x.sort(key=custom_key)123456789101112
- students = [('john', 'A', 15), ('jane', 'B', 12), ('dave','B', 10)]
- sorted(students,key=lambda x: x[2]) #按照年齡來排序12
- #元組內(e1, e2, e3)的優先順序排列為: e1 > e2 > e3sorted(s, key=lambda x: (x.isdigit(),x.isdigit() and int(x) % 2 == 0,x.isupper(),x)#input: 'asdf234GDSdsf23'#output: 'addffssDGS33224'12345
x.isdigit()的作用是把數字放在後邊(True),字母放在前面(False).
x.isdigit() and int(x) % 2 == 0的作用是保證數字中奇數在前(False),偶數在後(True)。
x.isupper()的作用是在前面基礎上,保證字母小寫(False)在前大寫在後(True).
最後的x表示在前面基礎上,對所有類別數字或字母排序。
Key的作用原理
Python2中的自定義布爾函數cmp=custom_cmp(x, y)由Python3中的key=custom_key(x)代替。
在python3中,待比較元素x通過custom_key函數轉化為Python能比較的值custom_key(x),進而再基於返回值進行排序。
例子1:
例子2
關於lambda表達式
例子3
默認sorted([True, False])==[False, True] (False=0 < True=1)
一個字元串排序,排序規則:小寫<大寫<奇數<偶數
㈢ Python3.x運用cmp()函數進行高級排序報錯
numbers.sort這種用法是錯誤的,如果你想要排序,則用如下語句:
num_sort=sorted(numbers,key=None,reverse=False)
新的list
num_sort才是一個排序後的列表。然後,你自定義的cmp過程只能對比兩個數字,而能對比列表中的各個元素,python3解釋器不知道你要做什麼,所以才會出錯。
㈣ Python中字元和數字之間是怎麼比較大小的
任何兩個對象都可以比較
相同類型的對象(實例),如果是數字型(int/float/long/complex),則按照簡單的大小來比較;如果是非數字型,且類(型)中定義了__cmp__(含__gt__,__lt__等)則按照__cmp__來比較,否則按照地址(id)來比較
不同類型的對象(實例),如果其中一個比較對象是數字型(int/float/long/complex等),則數字型的對象<其它非數字型的對象;如果兩個都是非數字型的對象,則按照類型名的順序比較,如{} < "abc"(按照"dict" < "str"),而"abc" > [1,2], "abc" < (1,2)。
對於自定義的類(型)實例,如果繼承自基本類型,則按照基本類型的規則比較(1-3)。否則,old-style class < new-style class, new-style class之間按照類型名順序比較,old-style class之間按照地址進行比較
bool類型是int的子類,且True=1, False=0,比較時按照1-4來比較,如True > -1, True < 4.2, True < "abc"等
上面的回答是針對Python2.x,3.x的有較大的變化,如str和int比較時會拋出異常等。
回到題目,字元和數字的比較符合規則3,所以數字<字元。舉個例子,如100和'a'(ord('a')=97),有
100<'a'
㈤ Python3.x運用cmp()函數進行高級排序報錯
numbers.sort這種用法是錯誤的,如果你想要排序,則用如下語句:
num_sort=sorted(numbers,key=None,reverse=False)
新的list num_sort才是一個排序後的列表。然後,你自定義的cmp過程只能對比兩個數字,而能對比列表中的各個元素,python3解釋器不知道你要做什麼,所以才會出錯。
㈥ Python 比較兩個字典大小
學習 Python 時,遇到看到菜鳥教程里的 cmp() 方法,衍生出這篇文章。但是後來和朋友討論,感覺在實際應用中極少有用到比較字典大小的場景。不過能搞懂一個知識點,還是很開心的。
cmp(dict1, dict2) 比較兩個字典大小的方法:先比字典長度,若相等就比 key 值,若再相等就比 value。
但是這個方法已經被 Python 3 取消了。
請參考: Python2 用 cmp() 比較字典大小 , Python3 為什麼取消了 __cmp__ 方法
operator 模塊提供了一系列方法比較兩個字典大小,詳細方法及使用示例請參考: Python3 使用 operator 模塊比較字典大小 。
但是在寫法上我們要注意,最好用 String 內置的方法,這樣利於對空值的判斷:
結果如下:
㈦ 新手學習python3.2 有關cmp
The cmp() function should be treated as gone, and the __cmp__() special method is no longer supported. Use __lt__() for sorting, __eq__() with __hash__(), and other rich comparisons as needed. (If you really need the cmp() functionality, you could use the expression (a > b) - (a < b) as the equivalent for cmp(a, b).)
大意就是cmp()函數已經「離開」了,如果你真的需要cmp()函數,可以用表達式(a > b) - (a < b)代替cmp(a,b)。
㈧ python3 為什麼取消了sort方法中的cmp參數
使用functools.cmp_to_key 即可。
附通過的代碼:
class Solution:
# @param {integer[]} nums
# @return {string}
def largestNumber(self, nums):
from functools import cmp_to_key
key = cmp_to_key(lambda x,y: int(y+x)-int(x+y))
res = ''.join(sorted(map(str, nums), key=key)).lstrip('0')
return res or '0'
㈨ 如何把Python2的代碼轉換為Python3的代碼
可以利用Python內置工具2to3.py,幫你自動將Python2的代碼轉換為Python3的代碼的。這個腳本的位置位在Python安裝的根目錄\Python27\Tools\Scripts\2to3.py。
比如我手上有個Python 2.x的python腳本:D:\tmp\transform.py
可以通過打開命令提示符,定位至該要轉換的腳本目錄下,然後運行
2to3.py -w transform.py
如果上述不加-w參數,則默認只是把轉換過程所對應的diff內容列印輸出到當前窗口而已。加了-w,就是把改動內容,寫回到原先的文件了。
㈩ python編程中cmp()函數是什麼意思
cmp就是一個比較的方法,python3.x已經去掉了這個多餘的東西