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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

第二章 列表和元组

發(fā)布時(shí)間:2023/12/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第二章 列表和元组 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第二章 列表和元組

在Python中,最基本的數(shù)據(jù)結(jié)構(gòu)為序列(包括列表、元組、字符串等)(sequence)
列表是可以修改的,而元組不可以
Python支持一種數(shù)據(jù)結(jié)構(gòu)的基本概念,名為容器(container)
容器基本上就是可包含其他對(duì)象的對(duì)象
兩種主要的容器是序列(如列表和元組)和映射(如字典)
在序列中,每個(gè)元素都有編號(hào),而在映射中,每個(gè)元素都有名稱(也叫)。
有一種既不是序列也不是映射的容器,它就是集合(set)

通用的序列操作

通用的序列操作包括索引切片相加相乘成員資格檢查

1,索引

索引中,下標(biāo)從0開始訪問(wèn)單個(gè)元素,0時(shí)第一個(gè)元素的位置
用負(fù)數(shù)索引時(shí),Python將從右(即從最后一個(gè)元素)開始往左數(shù),-1是最后一個(gè)元素的位置

beyond = "I love the band" beyond[0]#結(jié)果為:I beyond[2]#結(jié)果為:l beyond[-1]#結(jié)果為:d beyond[-2]#結(jié)果為:n "beyond"[2]#結(jié)果為:yfourth = input('Year: ')[3] 輸入結(jié)果:Year: 1999 輸出結(jié)果:'9'

2,切片:

除使用索引來(lái)訪問(wèn)單個(gè)元素外,還可使用切片(slicing)來(lái)訪問(wèn)特定范圍內(nèi)的元素
簡(jiǎn)而言之,左閉右開
切片索引方向只能從左向右,不能反過(guò)來(lái)操作,即左小右大,左閉右開
若要反過(guò)來(lái)操作需要指定步長(zhǎng)即可

number = [0,1,2,3,4,5,6,7,8,9] number[1:3]#結(jié)果為:[1,2] number[4:5]#結(jié)果為:[4] number[8:10]#結(jié)果為:[8,9] 索引10,該元素壓根不存在,但是沒有報(bào)錯(cuò),壓根用不到,左閉右開number[-3:-1]#結(jié)果為:[7,8] number[-1:-3]#結(jié)果為:[] ''' 如果第一個(gè)索引指定的元素位于第二個(gè)索引指定的元素后面 (在這里,倒數(shù)第3個(gè)元素位于第1個(gè)元素后面),結(jié)果就為空序列 '''#切片結(jié)束于序列末尾,可省略第二個(gè)索引 number[-3:]#結(jié)果為:[7,8,9] #如果切片始于序列開頭,可省略第一個(gè)索引 number[:3]#結(jié)果為:[0,1,2] #要復(fù)制整個(gè)序列,可將兩個(gè)索引都省略 number[:]#結(jié)果為:[0,1,2,3,4,5,6,7,8,9]

設(shè)置步長(zhǎng)的切片
通常情況不寫步長(zhǎng)的時(shí)候,步長(zhǎng)默認(rèn)為1

number=[0,1,2,3,4,5,6,7,8,9] number[0:5]#結(jié)果為:[0,1,2,3,4] number[0:5:1]#結(jié)果為:[0,1,2,3,4] #不寫第三個(gè)參數(shù)步長(zhǎng)的話默認(rèn)為1number[0:10:2]#結(jié)果為:[0,2,4,6,8] 步長(zhǎng)為2時(shí),將從起點(diǎn)和終點(diǎn)之間每隔一個(gè)元素提取一個(gè)元素#要從序列中每隔3個(gè)元素提取1個(gè),只需提供步長(zhǎng)4即可 number[::4]#結(jié)果為:[0,4,8]#當(dāng)然,步長(zhǎng)不能為0,否則無(wú)法向前移動(dòng),但可以為負(fù)數(shù),即從右向左提取元素 number[8:3:-1]#結(jié)果為:[8,7,6,5,4] number[3:8:-1]#結(jié)果為:[]#步長(zhǎng)為正數(shù)時(shí),它從起點(diǎn)移到終點(diǎn) #步長(zhǎng)為負(fù)數(shù)時(shí),它從終點(diǎn)移到起點(diǎn) number[5::-2]#結(jié)果為:[5,3,1] number[:5:-2]#結(jié)果為:[9,7]

3,序列相加+

[1,2,3] + [3,2,1]#結(jié)果為:[1,2,3,3,2,1] 'hello,' + "beyond"#結(jié)果為:'hello,beyond'[1,2,2] + "yanyu"#結(jié)果為:報(bào)錯(cuò)!!! #一般而言,不能拼接不同類型的序列

4,乘法*

“beyond” * 5#結(jié)果為:'beyondbeyondbeyondbeyondbeyond' [521] * 3#結(jié)果為:[521,521,521]''' Python中None表示什么都沒有,為空 將列表長(zhǎng)度初始化為5如下: ''' beyond = [None] * 5 beyond#結(jié)果為:[None,None,None,None,None]

5,成員資格in

要檢查特定的值(可以是單個(gè)字符也可以是字符串)是否包含在序列中,可使用運(yùn)算符in
它檢查是否滿足指定的條件,并返回相應(yīng)的值,滿足時(shí)返回True,不滿足時(shí)返回False
這樣的運(yùn)算符稱為布爾運(yùn)算符,而前述真值稱為布爾值

beyond = "yanyu like beyond" 'y' in beyond#結(jié)果為:True 'q' in beyond#結(jié)果為:Falseusers = ['yanyu','huangjiaju','yeshirong'] input('Enter your user name:') in users Enter your user name:yanyu #結(jié)果為:True

長(zhǎng)度、最小值、最大值
函數(shù)len返回序列包含的元素個(gè)數(shù)minmax分別返回序列中最小最大的元素

beyond = [19,5,22] len(beyond)#結(jié)果為:3 max(beyond)#結(jié)果為:22 min(beyond)#結(jié)果為:5max(1999,2005)#結(jié)果為:2005 min(98,55)#結(jié)果為:55

列表

函數(shù)list,使用字符串來(lái)創(chuàng)建列表
可將任何序列(而不僅僅是字符串)作為list的參數(shù)

list("beyond")#結(jié)果為:['b', 'e', 'y', 'o', 'n', 'd']

基本的列表操作包括索引切片拼接相乘,但列表的有趣之處在于
是可以修改的

1,修改列表:給元素賦值

beyond = [1,2,3,4,5] beyond[1] = 99 beyond#結(jié)果為:[1,99,3,4,5] #不能給不存在的元素賦值,因此如果列表的長(zhǎng)度為2,就不能給索引為100的元素賦值

2,刪除元素del

yanyu = ["yanyu",1999,'huangjiaju'] del yanyu[1] yanyu#結(jié)果為:['yanyu','huangjiaju']

3,給切片賦值

yanyu = list("beyond") yanyu#結(jié)果為:['b', 'e', 'y', 'o', 'n', 'd']yanyu[2:] = list('SQ') yanyu#結(jié)果為:['b','e','S','Q'] yanyu[3:] = list("jiaju") yanyu#結(jié)果為:['b', 'e', 'S', 'j', 'i', 'a', 'j', 'u']#在不替換原有元素的情況下插入新元素 yanyu[1:1] = [6,7,8] yanyu#結(jié)果為:['b', 6, 7, 8, 'e', 'S', 'j', 'i', 'a', 'j', 'u'] yanyu[1:3] = [] yanyu#結(jié)果為:['b', 8, 'e', 'S', 'j', 'i', 'a', 'j', 'u'] ''' 這很顯然與del yanyu[1:3]等效 類推,也可以對(duì)執(zhí)行步長(zhǎng)不為1的切片進(jìn)行賦值 '''

4,列表方法

方法是與對(duì)象(列表、數(shù)、字符串等)聯(lián)系緊密的函數(shù)
object.method(arguments)
方法調(diào)用與函數(shù)調(diào)用很像,只是在方法名前加上了對(duì)象句點(diǎn)
列表包含多個(gè)可用來(lái)查看或修改其內(nèi)容的方法

1,append,將一個(gè)對(duì)象附加到列表末尾

yanyu = [1,2,4,5,6] yanyu.append(7) yanyu#結(jié)果為:[1,2,4,5,6,7]

2,clear,就地清空列表的內(nèi)容

yanyu = [1,2,3] yanyu.clear() yanyu#結(jié)果為:[] #這類似于切片賦值語(yǔ)句yanyu[:] = []

3,copy,復(fù)制列表(將另一個(gè)名稱關(guān)聯(lián)到列表)

a = [1,2,3] b = a b[1] = 4 a#結(jié)果為:[1,4,3] #將另一個(gè)名稱關(guān)聯(lián)到列表a = [1,2,3] b = a.copy() b[1] = 4 a#結(jié)果為:[1, 2, 3] #這類似于使用a[:]或list(a),它們也都復(fù)制a

4,count,計(jì)算指定的元素在列表中出現(xiàn)了多少次

['to', 'be', 'or', 'not', 'to', 'be'].count('to') #結(jié)果為:2 x = [[1, 2], 1, 1, [2, 1, [1, 2]]] x.count(1) #結(jié)果為:2 x.count([1, 2]) #結(jié)果為:1

5,extend,同時(shí)將多個(gè)值附加到列表末尾,可使用一個(gè)列表來(lái)擴(kuò)展另一個(gè)列表

a = [1, 2, 3] b = [4, 5, 6] a.extend(b) a #結(jié)果為:[1, 2, 3, 4, 5, 6] #很明顯a這個(gè)列表已經(jīng)發(fā)生了修改 ''' extend是將b擴(kuò)展到a,a會(huì)發(fā)生變化會(huì)被擴(kuò)展 而常規(guī)拼接+,只是返回一個(gè)新的序列,原本的不會(huì)被修改 ''' a = [1, 2, 3] b = [4, 5, 6] a + b #結(jié)果為:[1, 2, 3, 4, 5, 6] a #結(jié)果為:[1, 2, 3] #很明顯a這個(gè)列表并沒有改變 a = a+b#結(jié)果為:[1, 2, 3, 4, 5, 6] 效果實(shí)現(xiàn)了 但是拼接的效率將比extend低a = [1, 2, 3] b = [4, 5, 6] a[len(a):] = b a #結(jié)果為:[1, 2, 3, 4, 5, 6] #這雖然可行,但可讀性不是很高

6,index,查找指定值第一次出現(xiàn)的索引

yanyu= ['We', 'are', 'the', 'knights', 'who', 'say', 'huangjiaju'] yanyu.index('who') #結(jié)果為:4 who處于索引第4處 yanyu.index('xixihaha')#結(jié)果為:報(bào)錯(cuò) 其不存在

7,insert,用于將一個(gè)對(duì)象插入列表

numbers = [1, 2, 3, 5, 6, 7] numbers.insert(3, 'four') numbers #結(jié)果為:[1, 2, 3, 'four', 5, 6, 7]''' 與extend一樣,也可使用切片賦值來(lái)獲得與insert一樣的效果 這雖巧妙,但可讀性根本無(wú)法與使用insert媲美 ''' numbers = [1, 2, 3, 5, 6, 7] numbers[3:3] = ['four'] numbers #結(jié)果為:[1, 2, 3, 'four', 5, 6, 7]

8,pop,從列表中刪除一個(gè)元素(末尾為最后一個(gè)元素),并返回這一元素

pop是唯一既修改列表返回一個(gè)非None值的列表方法

x = [1,2,3987] x.pop()#結(jié)果為:7 x#結(jié)果為:[1,2,3,9,8] x.pop(2)#結(jié)果為:3 x#結(jié)果為:[1,2,9,8] ''' 使用pop可實(shí)現(xiàn)一種常見的數(shù)據(jù)結(jié)構(gòu)——棧(stack)后進(jìn)先出 push和pop是大家普遍接受的兩種棧操作(加入和取走)的名稱 Python沒有提供push,但可使用append來(lái)替代 方法pop和append的效果相反,因此將剛彈出的值壓入(或附加)后,得到的棧將與原來(lái)相同要?jiǎng)?chuàng)建先進(jìn)先出(FIFO)的隊(duì)列,可使用insert(0, ...)代替append 另外,也可繼續(xù)使用append,但用pop(0)替代pop()。 ''' x = [1,4,7] x.append(x.pop()) x#結(jié)果為:[1,4,7]

9,remove,用于刪除第一個(gè)為指定值的元素

remove是就地修改且不返回值的方法
不同于pop的是,它
修改列表
,但不返回任何值

x = ['I','love',"beyond",'and',"I",'hahaha'] x.remove("I") x#結(jié)果為: x.remove("SQ")#結(jié)果為:報(bào)錯(cuò) 原因?yàn)榱斜砝锩鏇]有該元素

10,reverse,按相反的順序排列列表中的元素

修改列表,但不返回任何值(與remove和sort等方法一樣)

x = [1, 2, 3] x.reverse() x #結(jié)果為:[3, 2, 1]''' 如果要按相反的順序迭代序列,可使用函數(shù)reversed 這個(gè)函數(shù)不返回列表,而是返回一個(gè)迭代器,不改變?cè)瓉?lái)的列表 ''' x = [1, 2, 3] list(reversed(x)) #結(jié)果為:[3, 2, 1] x#結(jié)果為:[1,2,3]

11,sort,用于對(duì)列表就地排序

sort方法:對(duì)原來(lái)的列表進(jìn)行修改,使其元素按順序排列,且不返回任何值!!!
sorted函數(shù):可用于任何序列,但總是返回一個(gè)列表

x = [7,4,1,8,9,6,5,2,3] x.sort() x#結(jié)果為:[1,2,3,4,5,6,7,8,9]y = [9,5,1,7,8,6] z = y.sort() print(z)#結(jié)果為:None 其原因在于,sort不返回任何值!!! y#結(jié)果為:[1,5,6,7,8,9] y列表排序了,但是sort不返回任何值導(dǎo)致z為None#先將z關(guān)聯(lián)到y(tǒng)的副本,再對(duì)z進(jìn)行排序 y = [9,5,1,7,8,6] z = y.copy() z.sort() z#結(jié)果為:[1, 5, 6, 7, 8, 9] z進(jìn)行排序 y#結(jié)果為:[9, 5, 1, 7, 8, 6] y并未修改#另一種方式是使用函數(shù)sorted x = [4, 6, 2, 1, 7, 9] y = sorted(x) y #結(jié)果為:[1, 2, 4, 6, 7, 9] x #結(jié)果為:[4, 6, 2, 1, 7, 9] #如果要將元素按相反的順序排列,可先使用sort(或sorted),再調(diào)用方法reverse,也可使用參數(shù)reversesorted('Python') #結(jié)果為:['P', 'h', 'n', 'o', 't', 'y'] 大寫字母<小寫字母,相同類型字母a或A最小

12,高級(jí)排序

方法sort接受兩個(gè)可選參數(shù)(關(guān)鍵字參數(shù)):keyreverse
參數(shù)key類似于參數(shù)cmp:你將其設(shè)置為一個(gè)用于排序的函數(shù)
參數(shù)reverse:只需將其指定為一個(gè)真值(True或False),以指出是否要按相反的順序?qū)α斜磉M(jìn)行排序
要根據(jù)長(zhǎng)度對(duì)元素進(jìn)行排序,可將參數(shù)key設(shè)置為函數(shù)len

x = ["qwert","asf",'zx',"vxcb",'sdfsd'] x.sort(key=len) x#結(jié)果為:['zx', 'asf', 'vxcb', 'qwert', 'sdfsd']y = [4,6,8,2,1,9,7] y.sort(reverse=True) y#結(jié)果為:[9, 8, 7, 6, 4, 2, 1]

元組:不可修改的序列()

元組語(yǔ)法很簡(jiǎn)單,只要將一些值用逗號(hào)分隔,就能自動(dòng)創(chuàng)建一個(gè)元組

1,2,3#結(jié)果為:(1, 2, 3) 元組 (1,2,3)#結(jié)果為:(1, 2, 3) 元組#逗號(hào)很關(guān)鍵,若只有一個(gè)數(shù)時(shí),不加逗號(hào)就代表數(shù),加上逗號(hào)代表元組 1999#結(jié)果為:1999 數(shù) 1999,#結(jié)果為:(1999,) 元組 (1999,)#結(jié)果為:(1999,) 元組

函數(shù)tuple的工作原理與list很像:它將一個(gè)序列作為參數(shù),并將其轉(zhuǎn)換為元組
如果參數(shù)已經(jīng)是元組,就原封不動(dòng)地返回它

tuple([1, 2, 3])#結(jié)果為:(1, 2, 3) tuple('abc')#結(jié)果為:('a', 'b', 'c') tuple((1, 2, 3))#結(jié)果為:(1, 2, 3)

元組的創(chuàng)建及其元素的訪問(wèn)方式與其他序列相同

x = 1, 2, 3 x#結(jié)果為:(1,2,3) x[1]#結(jié)果為:2 x[0:2] #結(jié)果為:(1, 2)

本章節(jié)介紹的新函數(shù)

函 數(shù)描 述
len(seq)返回序列的長(zhǎng)度
list(seq)將序列轉(zhuǎn)換為列表
max(args)返回序列或一組參數(shù)中的最大值
min(args)返回序列和一組參數(shù)中的最小值
reversed(seq)讓你能夠反向迭代序列
sorted(seq)返回一個(gè)有序列表,其中包含指定序列中的所有元素
tuple(seq)將序列轉(zhuǎn)換為元組

總結(jié)

以上是生活随笔為你收集整理的第二章 列表和元组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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