當前位置:首頁 » 編程語言 » cmppython3

cmppython3

發布時間: 2023-06-04 14:25:54

『壹』 python3.x運用cmp()函數進行高級排序報錯

numbers.sort這種用法是錯誤的,如果你想要排序,則用如下語句:
num_sort=sorted(numbers,key=None,reverse=False)
新的list num_sort才是一個排序後的列表。然後,你自定義的cmp過程只能對比兩個數字,而能對比列表中的各個元素,python3解釋器不知道你要做什麼,所以才會出錯。

『貳』 深入理解python中的排序sort

進行一個簡單的升序排列直接調用sorted()函數,函數將會返回一個排序後的列表:

sorted函數不會改變原有的list,而是返回一個新的排好序的list

如果你想使用就地排序,也就是改變原list的內容,那麼可以使用list.sort()的方法,這個方法的返回值是None。

另一個區別是,list.sort()方法只是list也就是列表類型的方法,只可以在列表類型上調用。而sorted方法則是可以接受任何可迭代對象。

list.sort()和sorted()函數都有一個key參數,可以用來指定一個函數來確定排序的一個優先順序。比如,這個例子就是根據大小寫的優先順序進行排序:

key參數的值應該是一個函數,這個函數接受一個參數然後返回以一個key,這個key就被用作進行排序。這個方法很高效,因為對於每一個輸入的記錄只需要調用一次key函數。
一個常用的場景就是當我們需要對一個復雜對象的某些屬性進行排序時:

再如:

前面我們看到的利用key-function來自定義排序,同時Python也可以通過operator庫來自定義排序,而且通常這種方法更好理解並且效率更高。
operator庫提供了 itemgetter(), attrgetter(), and a methodcaller()三個函數

同時還支持多層排序

list.sort()和sorted()都有一個boolean類型的reverse參數,可以用來指定升序和降序排列,默認為false,也就是升序排序,如果需要降序排列,則需將reverse參數指定為true。

排序的穩定性指,有相同key值的多個記錄進行排序之後,原始的前後關系保持不變

我們可以看到python中的排序是穩定的。

我們可以利用這個穩定的特性來進行一些復雜的排序步驟,比如,我們將學生的數據先按成績降序然後年齡升序。當排序是穩定的時候,我們可以先將年齡升序,再將成績降序會得到相同的結果。

傳統的DSU(Decorate-Sort-Undecorate)的排序方法主要有三個步驟:

因為元組是按字典序比較的,比較完grade之後,會繼續比較i。
添加index的i值不是必須的,但是添加i值有以下好處:

現在python3提供了key-function,所以DSU方法已經不常用了

python2.x版本中,是利用cmp參數自定義排序。
python3.x已經將這個方法移除了,但是我們還是有必要了解一下cmp參數
cmp參數的使用方法就是指定一個函數,自定義排序的規則,和java等其他語言很類似

也可以反序排列

python3.x中可以用如下方式:

『叄』 新手學習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)。

『肆』 python2.7是python幾

Python2.7是Python2版本,Python3.x才是Python3版本。

Python2與Python3的主要區別:

區別一:print語法使用

Python2.7 print語法使用 >>> print "Hello Python"

Python3.7 print語法使用 >>> print("Hello Python")

區別二: raw_input()和input()

Python 2.7 raw_input() input() 都存在 可使用 raw_input()接收字元串string input()接收數字int /flot.

Python 3.7 raw_input()不存在 僅存在input() 兩者合並 接收任意格式 返回string

區別三: 函數cmp()

python 2.7 cmp(x,y)函數用於比較2個對象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1

python3.7 cmp()已經不存在了,如果你需要實現比較功能,需要引入 operator 模塊,適合任何對象

『伍』 Python 比較兩個字典大小

學習 Python 時,遇到看到菜鳥教程里的 cmp() 方法,衍生出這篇文章。但是後來和朋友討論,感覺在實際應用中極少有用到比較字典大小的場景。不過能搞懂一個知識點,還是很開心的。

cmp(dict1, dict2) 比較兩個字典大小的方法:先比字典長度,若相等就比 key 值,若再相等就比 value。
但是這個方法已經被 Python 3 取消了。
請參考: Python2 用 cmp() 比較字典大小 , Python3 為什麼取消了 __cmp__ 方法

operator 模塊提供了一系列方法比較兩個字典大小,詳細方法及使用示例請參考: Python3 使用 operator 模塊比較字典大小 。

但是在寫法上我們要注意,最好用 String 內置的方法,這樣利於對空值的判斷:

結果如下:

『陸』 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'

『柒』 如何把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,就是把改動內容,寫回到原先的文件了。

熱點內容
算命網源碼 發布:2024-04-17 05:53:16 瀏覽:295
C語言數組的遍歷 發布:2024-04-17 05:45:18 瀏覽:660
劃分清演算法 發布:2024-04-17 05:44:41 瀏覽:667
bitlocker暫停加密 發布:2024-04-17 05:25:21 瀏覽:542
腳本怎麼刷 發布:2024-04-17 05:09:50 瀏覽:134
如何調取手機存儲 發布:2024-04-17 05:06:50 瀏覽:920
linux的home 發布:2024-04-17 05:02:47 瀏覽:378
安卓王者榮耀怎麼快速退款 發布:2024-04-17 05:01:46 瀏覽:850
掛機腳本編輯器下載 發布:2024-04-17 05:01:36 瀏覽:723
伺服器開發看什麼書好 發布:2024-04-17 04:56:38 瀏覽:228