2013-01-24 47 views
0

我想爲我的Python代碼使用內置的sort()函數進行自定義排序,但可以基於兩個值對列表進行排序。我想要排序的列表被構造成一個元組列表,每個元組包含2個整數。我想排序的是根據每個第一個整數對元組列表進行排序,但是如果兩個第一個整數連接起來,它將引用它們的第二個整數,這是唯一的,因此不會相同。我想使用內置的sort()函數的速度,但能夠以這種方式進行排序。任何和所有的幫助非常讚賞!自定義Python排序:雙優先

+0

排序()可能更適合在這裏,但我不知道區別! – user1998665

+0

'sorted()'返回原始列表的新排序副本,而'sort()'修改原始列表。 –

回答

2

建在sorted這樣做。

>>> l = [(1, 1), (1, 2), (2, 5), (2, 4)] 
>>> sorted(l) 
[(1, 1), (1, 2), (2, 4), (2, 5)] 

sort()sorted()之間的差別在於sort()修改給定列表(因此,正在共享其結構的任何其他列表),而sorted()接受一個可迭代,並返回一個全新的列表對象。

例如:

>>> a = list("alphabet") 
>>> a 
['a', 'l', 'p', 'h', 'a', 'b', 'e', 't'] 
>>> b = a 
>>> b 
['a', 'l', 'p', 'h', 'a', 'b', 'e', 't'] 
>>> b.sort() 
>>> #this has modified the shared structure 
>>> a 
['a', 'a', 'b', 'e', 'h', 'l', 'p', 't'] 

與之相對sorted()

>>> c = list("alphabet") 
>>> d = c 
>>> sorted(d) 
['a', 'a', 'b', 'e', 'h', 'l', 'p', 't'] 
>>> c 
['a', 'l', 'p', 'h', 'a', 'b', 'e', 't'] 

sorted()更安全。

+0

我想你的意思是'sorted()'。 – Blender

+0

有什麼區別? – user1998665

+0

'sort'不是全局函數。你可能意思是'l.sort()'。不同之處在於'l.sort()'對列表進行了排序,而'sorted(l)'返回了一個新列表,並對這些列表進行了排序。 – bogatron

0

你剛剛描述了list.sort()方法的確切行爲,所以一旦你在列表中存在元組,只需調用沒有參數的列表的排序方法(l.sort),它將被放入所需的順序。

當需要更復雜的排序時,您可以傳遞一個「鍵函數」作爲命名參數key。該函數應用於列表中的每個元素以生成排序鍵,然後按排序鍵的順序對元素進行排序。

當您需要列表的已分類副本時,已排序的內置函數很方便 - 它簡單地爲您節省創建副本然後調用其排序方法的麻煩。