Python的列表和元組詳情
一、Python 列表(list)
1.序列介紹
序列是Python
中最基本的數(shù)據(jù)結(jié)構(gòu)。序列中的每個元素都分配一個數(shù)字 - 它的位置,或索引,第一個索引是0,第二個索引是
1,依此類推。Python有6個序列的內(nèi)置類型,但最常見的是列表和元組。序列都可以進(jìn)行的操作包括索引,切片,加,乘,檢查成員。此外,Python
已經(jīng)內(nèi)置確定序列的長度以及確定最大和最小的元素的方法。
Python:可變序列和不可變序列
可變序列:列表、集合、字典 可以進(jìn)行增刪改操作,序列地址頁不會發(fā)生變化
不可變序列:元組、字符串 沒有增刪改操作
#可變序列:列表、字典、集合 list_1 = [10,20,30] print(id(list_1))#list_1的地址為:2927159489792 list_1.append(40) print(id(list_1))#list_1的地址為:2927159489792 改變了值,列表地址并沒有改變 #不可變序列:字符串、元組 str_1 = "HelloWorld" print(id(str_1)) #str_1的地址為:2244899454896 str_1 = str_1+"1" print(id(str_1)) #str_1的地址為:2244900762928 改變了值,字符串地址也發(fā)生了變化
2.列表的概述
列表是包含0個或者多個元素的有序序列,屬于序列類型。
特點(diǎn):
- a.列表的長度和內(nèi)容是可變的(可以自由的對列表中的元素進(jìn)行,增加、刪除或者替換)
- b.列表沒有長度限制
- c.列表中的元素類型可以不同(可以是基本數(shù)據(jù)類型,也可以是列表、元組、字典、集合以及其他自定義類型的對象)
3.創(chuàng)建列表
創(chuàng)建一個列表,只要把逗號分隔的不同的數(shù)據(jù)項(xiàng)使用方括號括起來即可。如下所示:
#創(chuàng)建列表方式一 list_0 = [] #空列表 list_1 = ['elephan','monkey','tiger'] list_2 = [1,2,3] list_3 = [1,2.2,'tiger',True,list_1]#列表可存儲不同的數(shù)據(jù)類型 #創(chuàng)建列表方式二:使用list()內(nèi)置函數(shù) list(obj)函數(shù)將字符串、range()對象、元組等對象轉(zhuǎn)換為列表。 list_4 = list("python") list_5 = list([1,2,3,4,5]) list_6 = list((1,2,3)) list_7 = list(range(1,5,2))
4.列表的索引
#列表的索引 list_1 = [1,2.2,'tiger',True] print(list_1[0]) print(list_1[3]) #print(list_1[4]) 報錯,超出列表的長度
5.列表的分片
#列表的分片 list_1 = [1,2.2,'tiger',True] print(list_1[1:3]) print(list_1[0:3:2]) print(list_1[-1:0:-1]) #反向分片的時候,注意步長要為負(fù)數(shù)
6.列表的分片賦值
x = [1,2,3,4] x[1] = 1 #替換下角標(biāo)為1的索引 print(x) x[2:] = 5,6 #從下角標(biāo)為2的索引開始替換 print(x) x[1:1] = [1,2,3,4,5,6,7] #在變量索引為1的位置插入 “1,2,3,4,5,6,7” print(x) #運(yùn)行結(jié)果 [1, 1, 3, 4] [1, 1, 5, 6] [1, 1, 2, 3, 4, 5, 6, 7, 1, 5, 6]
7.循環(huán)遍歷列表
為了能有效地逐一輸出列表中的數(shù)據(jù),可以使用while
和for
循環(huán)來便利輸出列表。
while循環(huán)遍歷列表:
x = [1,2,3,4,5,6,7,8,9] length = len(x) i = 0 while i<length: print(x[i]) i+=1
for循環(huán)遍歷列表:
x = [1,2,3,4,5,6,7,8,9] for n in x: print(n)
8.查找元素與計(jì)數(shù)
index(obj)方法:用于返回指定元素在列表中首次出現(xiàn)的位置,如果該元素不在列表中則拋出異常。
animal = ['elephant','monkey','snake','tiger',(1,2,3)] print(animal.index((1,2,3)) print(animal.index("snake")) #print(animal.index("喵喵"))#找不到喵喵會拋出異常 x = input("請輸入您要查找的動物") if x in animal: a = animal.index(x) #返回索引值 print('元素{0}在列表中的索引為:{1}'.format(x,a)) else: print("列表中不存在該元素")
count(obj)方法:統(tǒng)計(jì)指定元素在列表中出現(xiàn)的次數(shù)
x = [1,2,2,2,3,4,[1,2,3,4],(1,2),(1,2)] a = x.count(2) print(a) b = x.count((1,2)) print(b) #運(yùn)行結(jié)果 3 2
9.列表增加元素
列表增加元素:append(obj)
方法 extend(seq)
方法 insert(index,obj)
方法
append(obj):在列表的末尾添加新的元素、對象
add_list = [0,1,2,3,4] add_list.append(5) #在末尾添加一個元素5 print(add_list) add_list.append([6,7]) #在末尾添加一個列表對象[6,7] print(add_list) x = [8,9] add_list.append(x) #在末尾添加一個列表對象x print(add_list) #運(yùn)行結(jié)果 [0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5, [6, 7]] [0, 1, 2, 3, 4, 5, [6, 7], [8, 9]]
extend(seq):在列表末尾一次性追加另一個序列中的多個值(用新列表拓展原來的列表)
list_1 = [1,2,3] list_2 = [4,5,6] list_1.extend("python") #將序列python與list_1合并 print(list_1) list_1.extend(list_2) #將list_2看作一個序列,將這個序列和list_1合并 print(list_1)
insert(index,obj):可以將指定的對象添加到指定位置
#insert()方法 number = [1,2,4,5] number.insert(2,3) #在索引為2的位置添加元素3 print(number) number.insert(5,[6,7]) #在索引為5的位置添加對象[6,7] print(number) x = [8,9] number.insert(6,x) #在索引為6的位置添加對象x print(number) #運(yùn)行結(jié)果 [1, 2, 3, 4, 5] [1, 2, 3, 4, 5, [6, 7]] [1, 2, 3, 4, 5, [6, 7], [8, 9]]
10.列表刪除元素
列表刪除元素:del
命令 pop()
方法 remove()
方法
del命令:根據(jù)索引刪除列表中的元素(刪除一個或者多個)
number = [1,2,3,4,5,6,7,8,9] del number[2]#刪除索引為2的元素 print(number) del number[1:3] #分片刪除索引1:3的元素 print(number) del number[-1:0:-2] #分片刪除索引-1:0:-2的元素 print(number)
pop([obj])方法:用于移除列表中的一個元素(默認(rèn)最后一個),并且返回該元素的值 (刪除一個)
number = [1,2,3,4,5,6,7,8,9] print(number.pop()) #默認(rèn)刪除最后一個元素,并返回該元素的值 print(number) print(number.pop(0) ) #刪除索引為0的元素 print(number)
remove(obj)方法:移除列表中某個值的第一個匹配項(xiàng)。
#使用remove方法刪除列表x中的所有'abc' x = ["123",'abc',"ABC",'python','abc'] while 'abc' in x: x.remove('abc') print(x) #運(yùn)行結(jié)果 ['123', 'ABC', 'python']
11.列表排序
reverse()方法:用于將列表中的元素反向存放(修改原列表值)。
x = [1,2,3,4] x.reverse() print(x) #運(yùn)行結(jié)果 [4, 3, 2, 1]
sort([key = None],[reverse = False])方法:用于對原列表進(jìn)行排序(默認(rèn)為升序排序),排序后的新列表會覆蓋原列表
key:傳遞給key參數(shù)的是一個函數(shù),它指定可迭代對象中的每一個元素來按照該函數(shù)進(jìn)行排序
reverse: 表示是否反向排序,默認(rèn)為False
# 這里先看一個不帶key參數(shù)的sort()函數(shù),大家很容易知道結(jié)果 li = [[1, 7], [1, 5], [2, 4], [1, 1]] li.sort() print(li) # [[1, 1], [1, 5], [1, 7], [2, 4]] 默認(rèn)按照0維排序 再按照1維排序 def fun(li): return li[1] # 這時將函數(shù)fun傳遞給參數(shù)key 得出結(jié)果 li.sort(key=fun) print(li) # [[1, 1], [2, 4], [1, 5], [1, 7]] #是li中每個子元素的第二個數(shù)進(jìn)行排序 #無參數(shù)排序 x = [1,2,3,4,5] x.sort() print(x) #指定參數(shù)排序,長度,反向 x_1 = ['a','abc','abcd','ab'] x_1.sort(key=len,reverse=True) print(x_1) #運(yùn)行結(jié)果 [1, 2, 3, 4, 5] ['abcd', 'abc', 'ab', 'a']
sorted(iterable,[key = None],[reverse = False]) 函數(shù):排序方式與sort
一樣,但是sorted
函數(shù)會返回一個新列表,對原列表不進(jìn)行修改
iterable:表示可迭代對象,在這里就是列表名。
#無參數(shù)排序 x_1 = [1,5,2,3,4] x_2 = sorted(x_1) print(x_1) print(x_2) #指定參數(shù)排序 x_1 = ['a','abc','abcd','ab'] x_2 = sorted(x_1,key=len,reverse=True) print(x_1) print(x_2) #運(yùn)行結(jié)果 [1, 5, 2, 3, 4] [1, 2, 3, 4, 5] ['a', 'abc', 'abcd', 'ab'] ['abcd', 'abc', 'ab', 'a']
二、Python 元組(tuple)
元組是不可變序列,所以增刪改操作不能使用。
1.為什么要將元組設(shè)計(jì)成為不可變序列
- 在多任務(wù)環(huán)境下,同時操作對象不需要加鎖
- 在程序中盡量使用不可變序列
注意:元組中存儲的是對象的引用
- 如果元組中存儲的對象本身為不可變對象,則不能引用其他對象
- 如果元組中存儲的對象本身為可變對象,則可變對象的引用不可改變,但是數(shù)據(jù)可以
tuple_1 = (10,[20,30],"string") print("1",tuple_1[0],type(tuple_1[0]),id(tuple_1[0])) print("2",tuple_1[1],type(tuple_1[1]),id(tuple_1[1])) print("3",tuple_1[2],type(tuple_1[2]),id(tuple_1[2])) #tuple_1[0] = 1 #tuple_1[1] = 1 這三行代碼報錯,不能修改元組的值 #tuple_1[2] = 1 tuple_1[1].insert(2,40) #使用list的方法修改list的值,但是列表的引用地址并沒有改變 print("4",tuple_1[1],type(tuple_1[1]),id(tuple_1[1]))
運(yùn)行結(jié)果:
1 10 <class 'int'> 2698032015952
2 [20, 30] <class 'list'> 2698040063232
3 string <class 'str'> 2698040230832
4 [20, 30, 40] <class 'list'> 2698040063232
2.創(chuàng)建元組
#方式一:直接使用()創(chuàng)建 tuple_1 = (1,2.2,"Python",True) print(tuple_1) #運(yùn)行結(jié)果(1, 2.2, 'Python', True) #()可以省略不寫 tuple_1 = 1,2.22,"Python",True print(tuple_1) #運(yùn)行結(jié)果(1, 2.22, 'Python', True) #方式二:使用內(nèi)置函數(shù)tuple(obj)函數(shù)將字符串、range()對象、元組等對象轉(zhuǎn)換為元組 tuple_2 = tuple("python") tuple_3 = tuple([1,2,3,4,5]) tuple_4 = tuple((1,2,3)) tuple_5 = tuple(range(1,5,2)) tuple_6 = tuple({"a":"張三",True:1}) print(tuple_2)#運(yùn)行結(jié)果('p', 'y', 't', 'h', 'o', 'n') print(tuple_3)#運(yùn)行結(jié)果(1, 2, 3, 4, 5) print(tuple_4)#運(yùn)行結(jié)果(1, 2, 3) print(tuple_5)#運(yùn)行結(jié)果(1, 3) print(tuple_6)#運(yùn)行結(jié)果('a', True) #注意:當(dāng)元組的值,只包含一個元素的時候,一定要加入一個逗號 tuple_7 = (1,) tuple_8 = (1) tuple_9 = ("你",) tuple_10 = ("你") print(tuple_7)#運(yùn)行結(jié)果(1,) print(tuple_8)#運(yùn)行結(jié)果1 print(tuple_9)#運(yùn)行結(jié)果('你',) print(tuple_10) #運(yùn)行結(jié)果你
3.元組的遍歷
tuple_1 = ('python','world',94) #方法一:使用循環(huán)利用索引,獲取全部元組的元素 i = 0 length = len(tuple_1) while i<length: print(tuple_1[i]) i += 1 #方法二 for x in tuple_1: print(x)
4.元組的內(nèi)置函數(shù)
序列都會具備的三個函數(shù): len() max() min()
tuple():功能:以一個序列為參數(shù),并把它轉(zhuǎn)換為元組,如果參數(shù)本身是元組,則原樣返回該參數(shù)(參考上文元組的知識點(diǎn)2,創(chuàng)建元組)
到此這篇關(guān)于Python
的列表和元組詳情的文章就介紹到這了,更多相關(guān)Python
的列表和元組內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。