Python的自列表的定義排序
因是c++Acmer,故經常用到自定義排序
第一種方法:對小于號進行重載
因為所有比較都可通過小于號的結果進行推導
class
Dch
:
def
__init__
(
self
,
a
,
b
)
:
self
.
first
=
a
self
.
second
=
b
def
__str__
(
self
)
:
return
"first={},second={}"
.
format
(
self
.
first
,
self
.
second
)
def
__lt__
(
self
,
other
)
:
if
(
self
.
first
==
other
.
first
)
:
return
int
(
self
.
second
<
other
.
second
)
return
int
(
self
.
first
<
other
.
first
)
# isinstance(100,int)
aa
=
Dch
(
1
,
2
)
bb
=
Dch
(
100
,
1
)
cc
=
Dch
(
50
,
50
)
dd
=
Dch
(
30
,
-
1
)
ee
=
Dch
(
1
,
20
)
Mylist
=
[
aa
,
bb
,
cc
,
dd
,
ee
]
Mylist
=
sorted
(
Mylist
)
#sorted函數返回對list排序的結果,默認是穩定的歸并排序
for
i
in
range
(
len
(
Mylist
)
)
:
print
(
Mylist
[
i
]
)
列表也有內置函數sort,這是官方的解釋
sort
(***, key=None , reverse=False )此方法會對列表進行原地排序,只使用
<
來進行各項間比較。 異常不會被屏蔽 —— 如果有任何比較操作失敗,整個排序操作將失敗(而列表可能會處于被部分修改的狀態)。
sort()
接受兩個僅限以關鍵字形式傳入的參數 (僅限關鍵字參數):…
first=1,second=2
first=1,second=20
first=30,second=-1
first=50,second=50
first=100,second=1
第二種用sort的key參數和lambda表達式
可以參考python的官網文檔:https://docs.python.org/zh-cn/3/library/stdtypes.html#list.sort
class
pair
:
def
__init__
(
self
,
x
=
0
,
y
=
0
)
:
self
.
x
=
x
self
.
y
=
y
def
__lt__
(
self
,
other
)
:
if
self
.
x
==
other
.
x
:
return
self
.
y
<
other
.
y
return
self
.
x
-
self
.
y
def
__str__
(
self
)
:
return
"%d,%d"
%
(
self
.
x
,
self
.
y
)
me
=
[
]
me
.
append
(
pair
(
3
,
4
)
)
me
.
append
(
pair
(
1
,
3
)
)
me
.
append
(
pair
(
-
1
,
-
1
)
)
me
.
sort
(
key
=
lambda
x
:
(
x
.
y
)
)
for
i
in
me
:
print
(
i
)
#輸出:
#-1,-1
#1,3
#3,4
深入使用sort的key參數
如果我們用lambda表達式進行指定key關鍵詞排序時遇見c++ 這樣的pair要求的排序
(第一個關鍵詞從小到大排序,如果相同則按第二個關鍵詞從小到大排序)
該怎么做呢?
lambda表達式的結果可返回一個元組,按照對元素為元組的數組排序則默認字典序排序。
class
pair
:
def
__init__
(
self
,
x
=
0
,
y
=
0
)
:
self
.
x
=
x
self
.
y
=
y
def
__str__
(
self
)
:
return
"{} {}"
.
format
(
self
.
x
,
self
.
y
)
if
__name__
==
'__main__'
:
mmp
=
[
]
mmp
.
append
(
pair
(
1
,
2
)
)
mmp
.
append
(
pair
(
0
,
2
)
)
mmp
.
append
(
pair
(
4
,
5
)
)
mmp
.
append
(
pair
(
7
,
8
)
)
mmp
.
append
(
pair
(
4
,
3
)
)
mmp
.
sort
(
key
=
lambda
me
:
(
me
.
x
,
me
.
y
)
)
#這樣就會按照元組的字典序進行排序
for
i
in
mmp
:
print
(
i
)
'''
輸出
0 2
1 2
4 3
4 5
7 8
'''
#
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
