日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python元祖用法_Python序列(列表list和元组tuple)用法完全攻略

發(fā)布時(shí)間:2024/7/23 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python元祖用法_Python序列(列表list和元组tuple)用法完全攻略 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

所謂序列,指的是一種包含多項(xiàng)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),序列包含的多個(gè)數(shù)據(jù)項(xiàng)(也叫成員)按順序排列,可通過索引來訪問成員。

Python 的常見序列類型包括字符串、列表和元組。前一章介紹過的字符串,其實(shí)就是一種常見的序列,通過索引訪問字符串內(nèi)的字符程序就是序列的示范程序。

本節(jié)介紹的序列主要是指列表和元組,這兩種類型看起來非常相似,最主要的區(qū)別在于:元組是不可變的,元組一旦構(gòu)建出來,程序就不能修改元組所包含的成員(就像字符串也是不可變的,程序無法修改字符串所包含的字符序列);但列表是可變的,程序可以修改列表所包含的元素。

在具體的編程過程中,如果只是固定地保存多個(gè)數(shù)據(jù)項(xiàng),則不需要修改它們,此時(shí)就應(yīng)該使用元組;反之,就應(yīng)該使用列表。此外,在某些時(shí)候,程序需要使用不可變的對(duì)象,比如 Python 要求字典的 key 必須是不可變的,此時(shí)程序就只能使用元組。

簡(jiǎn)單講,列表和元組的關(guān)系就是可變和不可變的關(guān)系。

創(chuàng)建列表和元組

創(chuàng)建列表和元組的語法也有點(diǎn)相似,區(qū)別只是創(chuàng)建列表使用方括號(hào),創(chuàng)建元組使用圓括號(hào),并在括號(hào)中列出元組的元素,元素之間以英文逗號(hào)隔開。

創(chuàng)建列表的語法格式如下:

[ele1,ele2,ele3,...]

創(chuàng)建元組的語法格式如下:

(ele1,ele2,ele3,...)

下面代碼示范了在程序中定義列表和元組:

a_tuple = ('crazyit', 20, 5.6, 'fkit', -17)

print(a_tuple)

# 訪問第1個(gè)元素

print(a_tuple[0]) # crazyit

# 訪問第2個(gè)元素

print(a_tuple[1]) # 20

# 訪問倒數(shù)第1個(gè)元素

print(a_tuple[-1]) # -17

# 訪問倒數(shù)第2個(gè)元素

print(a_tuple[-2]) # -fkit

列表和元組切片

與前面介紹的字符串操作類似的是,列表和元組同樣也可使用索引獲取中間一段,這種用法被稱為 slice(分片或切片)。slice 的完整語法格式如下:

[start : end : step]

上面語法中 start、end 兩個(gè)索引值都可使用正數(shù)或負(fù)數(shù),其中負(fù)數(shù)表示從倒數(shù)開始。該語法表示從 start 索引的元素開始(包含),到 end 索引的元素結(jié)束(不包含)的所有元素,這和所有編程語言的約定類似。

step 表示步長(zhǎng),因此 step 使用負(fù)數(shù)沒有意義。

下面代碼示范了使用 start、end 獲取元組中間一段的用法:

a_tuple = ('crazyit', 20, 5.6, 'fkit', -17)

# 訪問從第2個(gè)到倒數(shù)第4個(gè)(不包含)所有元素

print(a_tuple[1: 3]) # (20, 5.6)

# 訪問從倒數(shù)第3個(gè)到倒數(shù)第1個(gè)(不包含)所有元素

print(a_tuple[-3: -1]) # (5.6, 'fkit')

# 訪問從第2個(gè)到倒數(shù)第2個(gè)(不包含)所有元素

print(a_tuple[1: -2]) # (20, 5.6)

# 訪問從倒數(shù)第3個(gè)到第5個(gè)(不包含)所有元素

print(a_tuple[-3: 4]) # (5.6, 'fkit')

如果指定 step 參數(shù),則可間隔 step 個(gè)元素再取元素。例如如下代碼:

b_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9)

# 訪問從第3個(gè)到第9個(gè)(不包含)、間隔為2的所有元素

print(b_tuple[2: 8: 2]) # (3, 5, 7)

# 訪問從第3個(gè)到第9個(gè)(不包含)、間隔為3的所有元素

print(b_tuple[2: 8: 3]) # (3, 6)

# 訪問從第3個(gè)到倒數(shù)第2個(gè)(不包含)、間隔為3的所有元素

print(b_tuple[2: -2: 2]) # (3, 5, 7)

加法

列表和元組支持加法運(yùn)算,加法的和就是兩個(gè)列表或元組所包含的元素的總和。

需要指出的是,列表只能和列表相加;元組只能和元組相加;元組不能直接和列表相加。

如下代碼示范了元組和列表的加法運(yùn)算:

a_tuple = ('crazyit' , 20, -1.2)

b_tuple = (127, 'crazyit', 'fkit', 3.33)

# 計(jì)算元組相加

sum_tuple = a_tuple + b_tuple

print(sum_tuple) # ('crazyit', 20, -1.2, 127, 'crazyit', 'fkit', 3.33)

print(a_tuple) # a_tuple并沒有改變

print(b_tuple) # b_tuple并沒有改變

# 兩個(gè)元組相加

print(a_tuple + (-20 , -30)) # ('crazyit', 20, -1.2, -20, -30)

# 下面代碼報(bào)錯(cuò):元組和列表不能直接相加

#print(a_tuple + [-20 , -30])

a_list = [20, 30, 50, 100]

b_list = ['a', 'b', 'c']

# 計(jì)算列表相加

sum_list = a_list + b_list

print(sum_list) # [20, 30, 50, 100, 'a', 'b', 'c']

print(a_list + ['fkit']) # [20, 30, 50, 100, 'fkit']

乘法

列表和元組可以和整數(shù)執(zhí)行乘法運(yùn)算,列表和元組乘法的意義就是把它們包含的元素重復(fù) N 次(N 就是被乘的倍數(shù))。

如下代碼示范了列表和元組的乘法:

a_tuple = ('crazyit' , 20)

# 執(zhí)行乘法

mul_tuple = a_tuple * 3

print(mul_tuple) # ('crazyit', 20, 'crazyit', 20, 'crazyit', 20)

a_list = [30, 'Python', 2]

mul_list = a_list * 3

print(mul_list) # [30, 'Python', 2, 30, 'Python', 2, 30, 'Python', 2]

當(dāng)然,也可以對(duì)列表、元組同時(shí)進(jìn)行加法、乘法運(yùn)算。例如,把用戶輸入的日期翻譯成英文表示形式,即添加英文的“第”后綴。對(duì)于 1、2、3 來說,英文的“第”后綴分別用 st、nd、rd 代表,其他則使用 th 代表。

為此,可使用如下代碼來完成該轉(zhuǎn)換:

# 同時(shí)對(duì)元組使用加法、乘法

order_endings = ('st', 'nd', 'rd')\

+ ('th',) * 17 + ('st', 'nd', 'rd')\

+ ('th',) * 7 + ('st',)

# 將會(huì)看到st、nd、rd、17個(gè)th、st、nd、rd、7個(gè)th、st

print(order_endings)

day = input("輸入日期(1-31):")

# 將字符串轉(zhuǎn)成整數(shù)

day_int = int(day)

print(day + order_endings[day_int - 1])

該程序中,同時(shí)對(duì) ('th',) 元組使用了乘法,再將乘法得到的結(jié)果使用加法連接起來,最終得到一個(gè)元組,該元組共有 31 個(gè)元素。

可能有讀者對(duì) ('th',) 這種寫法感到好奇,此處明明只有一個(gè)元素,為何不省略逗號(hào)?這是因?yàn)?('th') 只是字符串加上圓括號(hào),并不是元組,也就是說,('th') 和 'th' 是相同的。為了表示只有一個(gè)元素的元組,必須在唯一的元組元素之后添加英文逗號(hào)。

運(yùn)行上面程序,可以看到如下運(yùn)行結(jié)果:

輸入日期(1-31):27

27th

從上面的運(yùn)行結(jié)果可以看出,用戶輸入 27,程序通過元組為 27 添加了“th”后綴。

in 運(yùn)算符

in 運(yùn)算符用于判斷列表或元組是否包含某個(gè)元素,例如如下代碼:

a_tuple = ('crazyit' , 20, -1.2)

print(20 in a_tuple) # True

print(1.2 in a_tuple) # False

print('fkit' not in a_tuple) # True

長(zhǎng)度、最大值和最小值

Python 提供了內(nèi)置的 ten()、max()、min() 全局函數(shù)來獲取元組或列表的長(zhǎng)度、最大值和最小值。

由于 max()、min() 要對(duì)元組、列表中的元素比較大小,因此程序要求傳給 max()、min() 函數(shù)的元組、列表的元素必須是相同類型且可以比較大小。例如如下代碼:

# 元素都是數(shù)值的元組

a_tuple = (20, 10, -2, 15.2, 102, 50)

# 計(jì)算最大值

print(max(a_tuple)) # 102

# 計(jì)算最小值

print(min(a_tuple)) # -2

# 計(jì)算長(zhǎng)度

print(len(a_tuple)) # 6

# 元素都是字符串的列表

b_list = ['crazyit', 'fkit', 'Python', 'Kotlin']

# 計(jì)算最大值(依次比較每個(gè)字符的ASCII碼值,先比較第一個(gè)字符,若相同,繼續(xù)比較第二個(gè)字符,以此類推)

print(max(b_list)) # fkit(26個(gè)小寫字母的ASCII碼為97~122)

# 計(jì)算最小值

print(min(b_list)) # Kotlin (26個(gè)大寫字母的ASCII碼為65~90)

# 計(jì)算長(zhǎng)度

print(len(b_list)) # 4

在上面代碼中,首先使用 3 個(gè)函數(shù)對(duì)元素都是數(shù)值的元組進(jìn)行處理,可以看到程序獲取元組的最大值、最小值等。程序后半部分使用 3 個(gè)函數(shù)對(duì)元素都是宇符串的列表進(jìn)行處理,也可以看到程序獲取列表的最大值、最小值等,這說明 Python 的字符串也是可比較大小的,即 Python 依次按字符串中每個(gè)字符對(duì)應(yīng)的編碼來比較字符串的大小。

序列封包和序列解包

Python 還提供了序列封包(Sequence Packing)和序列解包(Sequence Unpacking)的功能。簡(jiǎn)單來說,Python 允許支持以下兩種賦值方式:

程序把多個(gè)值賦給一個(gè)變量時(shí),Python 會(huì)自動(dòng)將多個(gè)值封裝成元組。這種功能被稱為序列封包。

程序允許將序列(元組或列表等)直接賦值給多個(gè)變量,此時(shí)序列的各元素會(huì)被依次賦值給每個(gè)變量(要求序列的元素個(gè)數(shù)和變量個(gè)數(shù)相等)。這種功能被稱為序列解包。

下面代碼示范了序列封包和序列解包的功能:

# 序列封包:將10、20、30封裝成元組后賦值給vals

vals = 10, 20, 30

print(vals) # (10, 20, 30)

print(type(vals)) #

print(vals[1]) # 20

a_tuple = tuple(range(1, 10, 2))

# 序列解包: 將a_tuple元組的各元素依次賦值給a、b、c、d、e變量

a, b, c, d, e = a_tuple

print(a, b, c, d, e) # 1 3 5 7 9

a_list = ['fkit', 'crazyit']

# 序列解包: 將a_list序列的各元素依次賦值給a_str、b_str變量

a_str, b_str = a_list

print(a_str, b_str) # fkit crazyit

如果在賦值中同時(shí)運(yùn)用了序列封包和序列解包機(jī)制,就可以讓賦值運(yùn)算符支持同時(shí)將多個(gè)值賦給多個(gè)變量。例如如下代碼:

# 將10、20、30依次賦值給x、y、z

x, y, z = 10, 20, 30

print(x, y, z) # 10 20 30

上面代碼實(shí)際上相當(dāng)于如下執(zhí)行過程:

#先執(zhí)行序列封包

xyz = 10,20,30

#再執(zhí)行序列解包

x,y,z = xyz

使用這種語法也可以實(shí)現(xiàn)交換變量的值,例如如下代碼:

# 將y,z, x依次賦值給x、y、z

x, y, z = y, z, x

print(x, y, z) # 20 30 10

在序列解包時(shí)也可以只解出部分變量,剩下的依然使用列表變量保存。為了使用這種解包方式,Python 允許在左邊被賦值的變量之前添加“*”,那么該變量就代表一個(gè)列表,可以保存多個(gè)集合元素。例如如下程序:

# first、second保存前2個(gè)元素,rest列表包含剩下的元素

first, second, *rest = range(10)

print(first) # 0

print(second) # 1

print(rest) # [2, 3, 4, 5, 6, 7, 8, 9]

# last保存最后一個(gè)元素,begin保存前面剩下的元素

*begin, last = range(10)

print(begin) # [0, 1, 2, 3, 4, 5, 6, 7, 8]

print(last) # 9

# first保存第一個(gè)元素,last保存最后一個(gè)元素,middle保存中間剩下的元素

first, *middle, last = range(10)

print(first) # 0

print(middle) # [0, 1, 2, 3, 4, 5, 6, 7, 8]

print(last) # 9

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的python元祖用法_Python序列(列表list和元组tuple)用法完全攻略的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。