Python的自列表的定義排序
因是c++Acmer,故經(jīng)常用到自定義排序
第一種方法:對(duì)小于號(hào)進(jìn)行重載
因?yàn)樗斜容^都可通過小于號(hào)的結(jié)果進(jìn)行推導(dǎo)
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函數(shù)返回對(duì)list排序的結(jié)果,默認(rèn)是穩(wěn)定的歸并排序
for
i
in
range
(
len
(
Mylist
)
)
:
print
(
Mylist
[
i
]
)
列表也有內(nèi)置函數(shù)sort,這是官方的解釋
sort
(***, key=None , reverse=False )此方法會(huì)對(duì)列表進(jìn)行原地排序,只使用
<
來進(jìn)行各項(xiàng)間比較。 異常不會(huì)被屏蔽 —— 如果有任何比較操作失敗,整個(gè)排序操作將失敗(而列表可能會(huì)處于被部分修改的狀態(tài))。
sort()
接受兩個(gè)僅限以關(guān)鍵字形式傳入的參數(shù) (僅限關(guān)鍵字參數(shù)):…
first=1,second=2
first=1,second=20
first=30,second=-1
first=50,second=50
first=100,second=1
第二種用sort的key參數(shù)和lambda表達(dá)式
可以參考python的官網(wǎng)文檔: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參數(shù)
如果我們用lambda表達(dá)式進(jìn)行指定key關(guān)鍵詞排序時(shí)遇見c++ 這樣的pair要求的排序
(第一個(gè)關(guān)鍵詞從小到大排序,如果相同則按第二個(gè)關(guān)鍵詞從小到大排序)
該怎么做呢?
lambda表達(dá)式的結(jié)果可返回一個(gè)元組,按照對(duì)元素為元組的數(shù)組排序則默認(rèn)字典序排序。
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
)
)
#這樣就會(huì)按照元組的字典序進(jìn)行排序
for
i
in
mmp
:
print
(
i
)
'''
輸出
0 2
1 2
4 3
4 5
7 8
'''
#
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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