成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

列表排序python函數(shù) python 對列表排序

如何對列表進(jìn)行排序?python

很多時(shí)候,我們需要對List進(jìn)行排序,Python提供了兩個(gè)方法,對給定的List

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的武江網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

L進(jìn)行排序:

方法1.用List的成員函數(shù)sort進(jìn)行排序

方法2.用built-in函數(shù)sorted進(jìn)行排序(從2.4開始)

這兩種方法使用起來差不多,以第一種為例進(jìn)行講解:

從Python2.4開始,sort方法有了三個(gè)可選的參數(shù),Python

Library

Reference里是這樣描述的

復(fù)制代碼代碼如下:

cmp:cmp

specifies

a

custom

comparison

function

of

two

arguments

(iterable

elements)

which

should

return

a

negative,

zero

or

positive

number

depending

on

whether

the

first

argument

is

considered

smaller

than,

equal

to,

or

larger

than

the

second

argument:

"cmp=lambda

x,y:

cmp(x.lower(),

y.lower())"

key:key

specifies

a

function

of

one

argument

that

is

used

to

extract

a

comparison

key

from

each

list

element:

"key=str.lower"

reverse:reverse

is

a

boolean

value.

If

set

to

True,

then

the

list

elements

are

sorted

as

if

each

comparison

were

reversed.In

general,

the

key

and

reverse

conversion

processes

are

much

faster

than

specifying

an

equivalent

cmp

function.

This

is

because

cmp

is

called

multiple

times

for

each

list

element

while

key

and

reverse

touch

each

element

only

once.

以下是sort的具體實(shí)例。

實(shí)例1:

復(fù)制代碼代碼如下:

L

=

[2,3,1,4]

L.sort()

L

[1,2,3,4]

實(shí)例2:

復(fù)制代碼代碼如下:

L

=

[2,3,1,4]

L.sort(reverse=True)

L

[4,3,2,1]

實(shí)例3:

復(fù)制代碼代碼如下:

L

=

[('b',2),('a',1),('c',3),('d',4)]

L.sort(cmp=lambda

x,y:cmp(x[1],y[1]))

L

[('a',

1),

('b',

2),

('c',

3),

('d',

4)]

實(shí)例4:

復(fù)制代碼代碼如下:

L

=

[('b',2),('a',1),('c',3),('d',4)]

L.sort(key=lambda

x:x[1])

L

[('a',

1),

('b',

2),

('c',

3),

('d',

4)]

實(shí)例5:

復(fù)制代碼代碼如下:

L

=

[('b',2),('a',1),('c',3),('d',4)]

import

operator

L.sort(key=operator.itemgetter(1))

L

[('a',

1),

('b',

2),

('c',

3),

('d',

4)]

實(shí)例6:(DSU方法:Decorate-Sort-Undercorate)

復(fù)制代碼代碼如下:

L

=

[('b',2),('a',1),('c',3),('d',4)]

A

=

[(x[1],i,x)

for

i,x

in

enumerate(L)]

#i

can

confirm

the

stable

sort

A.sort()

L

=

[s[2]

for

s

in

A]

L

[('a',

1),

('b',

2),

('c',

3),

('d',

4)]

以上給出了6中對List排序的方法,其中實(shí)例3.4.5.6能起到對以List

item中的某一項(xiàng)

為比較關(guān)鍵字進(jìn)行排序.

效率比較:

復(fù)制代碼代碼如下:

cmp

DSU

key

通過實(shí)驗(yàn)比較,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相當(dāng)

多關(guān)鍵字比較排序:

實(shí)例7:

復(fù)制代碼代碼如下:

L

=

[('d',2),('a',4),('b',3),('c',2)]

L.sort(key=lambda

x:x[1])

L

[('d',

2),

('c',

2),

('b',

3),

('a',

4)]

我們看到,此時(shí)排序過的L是僅僅按照第二個(gè)關(guān)鍵字來排的,如果我們想用第二個(gè)關(guān)鍵字

排過序后再用第一個(gè)關(guān)鍵字進(jìn)行排序呢?有兩種方法

實(shí)例8:

復(fù)制代碼代碼如下:

L

=

[('d',2),('a',4),('b',3),('c',2)]

L.sort(key=lambda

x:(x[1],x[0]))

L

[('c',

2),

('d',

2),

('b',

3),

('a',

4)]

實(shí)例9:

復(fù)制代碼代碼如下:

L

=

[('d',2),('a',4),('b',3),('c',2)]

L.sort(key=operator.itemgetter(1,0))

L

[('c',

2),

('d',

2),

('b',

3),

('a',

4)]

為什么實(shí)例8能夠工作呢?原因在于tuple是的比較從左到右之一比較的,比較完第一個(gè),如果

相等,比較第二個(gè)

Python學(xué)習(xí)小技巧之列表項(xiàng)的排序

Python學(xué)習(xí)小技巧之列表項(xiàng)的排序

本文介紹的是關(guān)于Python列表項(xiàng)排序的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面來看看詳細(xì)的介紹:

典型代碼1:

data_list = [6, 9, 1, 3, 0, 10, 100, -100]

data_list.sort()

print(data_list)

輸出1:

[-100, 0, 1, 3, 6, 9, 10, 100]

典型代碼2:

data_list = [6, 9, 1, 3, 0, 10, 100, -100]

data_list_copy = sorted(data_list)

print(data_list)

print(data_list_copy)

輸出2:

[6, 9, 1, 3, 0, 10, 100, -100]

[-100, 0, 1, 3, 6, 9, 10, 100]

應(yīng)用場景

需要對列表中的項(xiàng)進(jìn)行排序時(shí)使用。其中典型代碼1是使用的列表自身的一個(gè)排序方法sort,這個(gè)方法自動按照升序排序,并且是原地排序,被排序的列表本身會被修改;典型代碼2是調(diào)用的內(nèi)置函數(shù)sort,會產(chǎn)生一個(gè)新的經(jīng)過排序后的列表對象,原列表不受影響。這兩種方式接受的參數(shù)幾乎是一樣的,他們都接受一個(gè)key參數(shù),這個(gè)參數(shù)用來指定用對象的哪一部分為排序的依據(jù):

data_list = [(0, 100), (77, 34), (55, 97)]

data_list.sort(key=lambda x: x[1]) # 我們想要基于列表項(xiàng)的第二個(gè)數(shù)進(jìn)行排序

print(data_list)

[(77, 34), (55, 97), (0, 100)]

另外一個(gè)經(jīng)常使用的參數(shù)是reverse,用來指定是否按照倒序排序,默認(rèn)為False:

data_list = [(0, 100), (77, 34), (55, 97)]

data_list.sort(key=lambda x: x[1], reverse=True) # 我們想要基于列表項(xiàng)的第二個(gè)數(shù)進(jìn)行排序,并倒序

print(data_list)

[(0, 100), (55, 97), (77, 34)]

帶來的好處

1. 內(nèi)置的排序方法,執(zhí)行效率高,表達(dá)能力強(qiáng),使代碼更加緊湊,已讀

2. 靈活的參數(shù),用于指定排序的基準(zhǔn),比在類似于Java的語言中需要寫一個(gè)comparator要方便很多

其它說明

1. sorted內(nèi)置函數(shù)比列表的sort方法要適用范圍更廣泛,它可以對除列表之外的可迭代數(shù)據(jù)結(jié)構(gòu)進(jìn)行排序;

2. list內(nèi)置的sort方法,屬于原地排序,理論上能夠節(jié)省內(nèi)存的消耗;

總結(jié)

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助

Python對列表排序函數(shù)sort()和reverse()的講解

列表中的數(shù)據(jù)種類很多,有字符串,有整型,有其他列表的嵌套,還有更多的數(shù)據(jù)類型,這些數(shù)據(jù)在列表中往往是錯(cuò)亂的,沒有一定的邏輯關(guān)系,但是我們在使用列表的時(shí)候往往需要按照一定的邏輯關(guān)系進(jìn)行調(diào)用或檢索。下面就來看看 列表是如何排序和翻轉(zhuǎn)的 ,所謂翻轉(zhuǎn)也就是把既定列表倒序排列。

返回結(jié)果:

從上面的返回結(jié)果可以看出來,sort()函數(shù)如果遇到字符串是按照首字母順序進(jìn)行排列的,如果遇到浮點(diǎn)型數(shù)據(jù)還是按照大小排列。

由上面的結(jié)果可以看出來,不同的數(shù)據(jù)類型是沒有辦法進(jìn)行排列的。

這個(gè)方法是把原列表中的元素順序從左至右的重新存放,而不會對列表中的參數(shù)進(jìn)行排序整理。如果需要對列表中的參數(shù)進(jìn)行整理,就需要用到列表的另一種排序方式sort正序排序。

python列表排序方法

列表的sort方法就是用來進(jìn)行排序的。

主要就是兩個(gè)參數(shù),key,reverse

先說reverse,這個(gè)很簡單,就是指出是否進(jìn)行倒序排序:一般情況下,1排在2的前面,而倒序則相反。

key參數(shù):一般它是一個(gè)函數(shù),它接受列表中每一個(gè)元素,返回一個(gè)可用用于比較的值。

s=[1,2,3,4,5]

s.sort(key=lambda _: _**2%7)

print(s)

輸出的是:[1, 3, 4, 2, 5]

如果看不懂lambda表達(dá)式,可以看這一段等價(jià)的寫法:

def myfn(x):

....return (x * x) % 7

s=[1,2,3,4,5]

s.sort(key=myfn)

print(s)

輸出的結(jié)果是一樣的。

key使用的函數(shù)可以是自定義函數(shù)也可以pytho內(nèi)置的函數(shù),或者是某個(gè)類或者實(shí)例的方法,只要它能接受一個(gè)參數(shù),返回一個(gè)可比較的值即可。比如這樣:

s=[[1,2,4],[3,3,5],[1,1,1],[5,7,9]]

s.sort(key=max)? # 直接使用max函數(shù)作為排序依據(jù)

print(s)

[[1, 1, 1], [1, 2, 4], [3, 3, 5], [5, 7, 9]]

python 內(nèi)置排序函數(shù)使用

python內(nèi)置關(guān)于排序的工具主要有兩個(gè)一個(gè)是列表自帶的 sort() 方法,另外一個(gè)是 sorted() 函數(shù)。Python 列表內(nèi)置方法可以直接修改列表。而 sorted() 內(nèi)置函數(shù)從一個(gè)可迭代對象(列表,元組等都可以)構(gòu)建一個(gè)新的排序列表。其函數(shù)原型分別如下:

對列表進(jìn)行默認(rèn)排序

從函數(shù)原型來看,可以看到兩者都具有兩個(gè)可選參數(shù),它們都必須指定為關(guān)鍵字參數(shù)。

key 指定帶有單個(gè)參數(shù)的函數(shù),用于從 iterable 的每個(gè)元素中提取用于比較的鍵 (例如 key=str.lower)。默認(rèn)值為 None (直接比較元素)。 key 形參的值應(yīng)該是個(gè)函數(shù)(或其他可調(diào)用對象),它接受一個(gè)參數(shù)并返回一個(gè)用于排序的鍵。

假設(shè)有其他類型的變量,比如一個(gè)自定義的類或者列表中又是一個(gè)列表。以官網(wǎng)例子為例有這樣一個(gè)列表,其元素為元組,

可以用以下方式按照年齡排序

類似的有自定義類

可以用如下方式進(jìn)行排序

也可以顯示定義一個(gè)函數(shù),且只有一個(gè)參數(shù),返回用于排序的鍵,比如

總之就是定義一個(gè)函數(shù)返回一個(gè)用于排序的鍵,可以用lambda函數(shù)或者 def 定義都可以。

上面實(shí)現(xiàn)的簡單函數(shù)實(shí)際就是實(shí)現(xiàn)了返回一個(gè)有序結(jié)構(gòu)的第 n 的元素,或者某個(gè)類中的某個(gè)屬性,因此 Python 提供了便利功能,使訪問器功能更容易,更快捷。operator 模塊有 itemgetter() 、 attrgetter() 函數(shù)。分別完成返回第 n 個(gè)元素,某個(gè)屬性功能。上面的排序可以用如下方式進(jìn)行實(shí)現(xiàn)

在python2中,sort有一個(gè) cmp 參數(shù),即用一個(gè)函數(shù)來自定義比較,在python3中這種方式被取消。為了繼承類似的用法,在 Python 3.2 中, functools.cmp_to_key() 函數(shù)被添加到標(biāo)準(zhǔn)庫中的 functools 模塊中。

這種作用先定義如何比較兩個(gè)變量,以上面的學(xué)生列表按照年齡排序?yàn)槔?/p>

這種做法自定義比較函數(shù)接收兩個(gè)形參,返回比較結(jié)果(bool),而新式方法接受一個(gè)參數(shù),返回的是比較的鍵。

假設(shè)有字典 d = {'b':2, 'a':1,'c':8,'d':4} ,則可以通過以下方式對字典按照鍵和值進(jìn)行排序

分享題目:列表排序python函數(shù) python 對列表排序
文章出自:http://jinyejixie.com/article18/hepddp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、營銷型網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站、做網(wǎng)站網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
商水县| 松原市| 武威市| 青海省| 安庆市| 梁山县| 安庆市| 灌南县| 和顺县| 凤翔县| 尼木县| 鄂托克旗| 建湖县| 桑日县| 蒙山县| 方正县| 卢龙县| 弋阳县| 象州县| 哈密市| 讷河市| 云安县| 阜新| 虎林市| 兴安县| 田林县| 罗城| 交口县| 镇沅| 平陆县| 宝应县| 芜湖市| 镇康县| 兴海县| 思茅市| 丹巴县| 梁平县| 四川省| 闸北区| 大渡口区| 安丘市|