Python程式根據值對元組排序
在本文中,我們將討論如何在Python中根據值對元組進行排序。元組是一種類似於列表的資料結構,但它是不可變的,這意味著一旦建立,我們就無法更改其中元素的值。
示例
以下是如何建立一個元組的示例 -
tple = ("Hello", "world", "hi") print(tple)
輸出
(“Hello”, “world”, “hi”)
有序、不可變的三元組專案可以有多個值。索引[0]分配給三元組中的第一個專案,[1]分配給第二個,依此類推。
當我們提到元組已排序時,我們的意思是元素按特定順序排列。
由於元組的不可變性,一旦建立,其任何元件都無法更改、新增或刪除。
示例
元組中允許重複值 -
tple = ("apple", "banana", "cherry", "apple", "cherry") print(tple)
輸出
(‘apple’, ‘banana’, ‘cherry’, ‘apple’, ‘cherry’
元組中的鍵和值
鍵和值通常不會作為元組中的配對存在,因為它們僅用於儲存任何給定物件的單個例項。另一方面,要建立包含鍵和值的元組,我們必須建立彼此巢狀的元組。
因此,每個元組中的第一個值將表示其鍵,第二個值將表示其值。
示例
ListOfTuples = ((1, 4), (3, 5), (4, 5), (5, 6))
在上面的程式碼行中,兩個元組包含在一個元組中;因此,例如,外部列表的第一個專案是一個包含兩個值的元組。這裡,元組的鍵由值1表示,其資料值由值4分別表示。
由於我們知道現在可以使用索引訪問元組,因此我們將使用索引來訪問內部元組元素以及鍵和值。
print(ListOfTuples[0][0])
這將輸出找到的外部列表的第一個元組的鍵。但是,如果我們不知道外部列表包含多少個元素會怎樣?如果在這種情況下使用索引嘗試訪問內部元素,則我們有遇到索引超出範圍錯誤的風險,這表示我們正在嘗試訪問元組中不存在的元素。
使用len()函式
為了解決這個問題,我們可以在使用它輸出僅這些元件的鍵和值之前,使用len函式確定外部列表中有多少個專案。
請注意,值實際上是巢狀列表的第二個元素,因此如果我們必須對元組列表進行排序,我們實際上必須比較列表內所有元組的第二個元素的值,並且只有在比較所有這些值之後,我們才能對它們進行排序。
由於它需要反覆檢視值,因此我們將需要巢狀的for迴圈。相同的演算法如下。
演算法
建立一個元組列表,其中元素是兩個值的元組,第一個是鍵,第二個是資料元素。
在排序前列印元組列表。
使用“for迴圈”迭代列表中從0到列表長度的元素。
使用另一個巢狀迴圈,該迴圈將從0執行到列表長度減1。
現在檢查當前元素的值部分是否大於下一個元素的值部分。
如果是,則交換兩個元素,即元組。
如果不是,則繼續下一個元素。
示例
tupleList = [(2, 5), (1, 3), (17, 27), (0, 5), (4, 1)] print("The elements of tuple list before sorting by values are : ") for item in tupleList: print(f"Key : {item[0]} Value : {item[1]}") for i in range(len(tupleList)): for j in range(len(tupleList) - 1): if tupleList[j][1] > tupleList[j+1][1]: tupleList[j], tupleList[j+1] = tupleList[j+1], tupleList[j] print("The elements of tuple list after sorting by values are : ") for item in tupleList: print(f"Key : {item[0]} Value : {item[1]}")
輸出
The elements of tuple list before sorting by values are : Key : 2 Value : 5 Key : 1 Value : 3 Key : 17 Value : 27 Key : 0 Value : 5 Key : 4 Value : 1 The elements of tuple list after sorting by values are : Key : 4 Value : 1 Key : 1 Value : 3 Key : 2 Value : 5 Key : 0 Value : 5 Key : 17 Value : 27
結論
在本文中,我們看到了使用巢狀迴圈根據其值對元組進行排序。或者,我們還可以使用帶有lambda函式的sort方法來為相同問題編寫單行解決方案。
TupleWithKeys.sort(key=lambda item: item[1])
上述方法實際上是解決問題的最Pythonic方法。