概述
? ? ? ? 列表、元組和字符串同屬于序列的一種,都有序列的特點(diǎn),每個(gè)元素都有編號(hào),即其位置或索引,其中第一個(gè)元素的索引為0,第二個(gè)元素的索引為1,依此類推。
一、列表
1、定義方法
? ? ? ? 列表名=[元素1,元素2,...]
? ? ? ? 列表名=list(序列名)
????????列表名=字符串.split()
????????列表名=[含有變量名的表達(dá)式 ?for ?變量名1 ?in ?序列 [for ?變量名2 ?in ?序列]....]
????????其中元素可以是任何類型,也可以是列表或元組,且可以各不相同。
????????使用列表生成式生成列表時(shí)可以使用嵌套循環(huán),還可以使用條件判斷。
例:
names=["張三","李四","王五","馬六"] ? ?#元素為字符串的列表
students=[[1,"張三"],[2,"李四"],[?3,"王五"]] ? ?#元素為列表的列表
names=list("Hello") ? ?#建立['H', 'e', 'l', 'l', 'o']列表
names=list()?? ?#建立空列表
names=[None]*4 ? ?#建立[None, None, None, None]定長(zhǎng)元素為空的列表
a=[x+x for x in range(5)] ? ?#使用列表生成式建立[0, 2, 4, 6, 8]列表
a=[x+x for x in range(5) if x%2==0]????#使用列表生成式建立[0, 4, 8]列表
a=[x+y for x in range(5) if x%2==0 for y in range(5) if y%2==1]????#使用列表生成式建立[1, 3, 3, 5, 5, 7]列表
a="This is a test string from Andrew".split() ? ?#使用split方法生成列表['This', 'is', 'a', 'test', 'string', 'from', 'Andrew']
2、基本操作方法
????????查詢:
????????????列表名[索引] ? ?通過(guò)索引查詢
????????????列表名[首索引:尾索引:步長(zhǎng)] ? ? ? ? ? ?通過(guò)切片查詢
? ? ? ? ????????說(shuō)明
????????????????索引是從0開始的整數(shù),索引和步長(zhǎng)都可以是負(fù)數(shù)。使用切片查詢時(shí),結(jié)果包括首索引元素不包括尾索引元素,即“顧首不顧尾”。
????????????????當(dāng)步長(zhǎng)為正數(shù)時(shí),以首索引位置自左向右按照步長(zhǎng)查詢,輸出結(jié)果為列表相同順序,所以首索引必須比尾索引?。划?dāng)為負(fù)數(shù)時(shí),以首索引位置自右向左按照步長(zhǎng)查詢,為列表反向順序,所以首索引必須比尾索引大;步長(zhǎng)不可以為0,且默認(rèn)為1。
? ? ? ? ????????當(dāng)首索引和尾索引為相等的數(shù)值時(shí),返回空列表。
? ? ? ? ????????使用切片查詢時(shí),可以在切片的同時(shí)再切片,實(shí)現(xiàn)嵌套切片。
例:
names=["張三","李四","王五","馬六"]?
#正索引:0 ? ? ? ?1 ? ? ? ? ? 2 ? ? ? ?3
#負(fù)索引:-4 ? ? ? -3 ? ? ? ?-2 ? ? ? ?-1
print(names[1] ) ? #返回????李四
print(names[-1]) ? ?#返回????馬六
print(names[0:2]) ? ?#返回?????['張三', '李四']
print(names[:2]) ? ?#返回?????['張三', '李四']
print(names[2:2]) ? ?#返回 ? ? ? []
print(names[1:3]) ? ?#返回?????['李四', '王五']
print(names[1:100] ) ? #?返回?????['李四', '王五', '馬六']
print(names[1:][1:][1:] ) ? #返回???['馬六']
print(names[-3:-1] ) ? #返回?????['李四', '王五']
print(names[-3:] ) ? #返回?????['李四', '王五', '馬六']
print(names[1:3:2] ) ? #?返回?????['李四']
print(names[::2] ) ? #返回?????['張三', '王五']
print(names[::-2] ) ? #返回?????['馬六', '李四']
print(names[1:3:-1])??? #返回??????[]
print(names[3:1:-1])??? #返回??????['馬六', '王五']
新增
? ? ? ? 列表名=列表名+列表名 ? ?使用列表相加方法
????????列表名=列表名*數(shù)值 ? ?使用列表乘積方法新增重復(fù)元素
? ? ? ? 列表名.append(元素) ? ?使用append方法結(jié)尾插入
????????列表名.extend(元素) ? ?使用extend方法結(jié)尾插入元素
? ? ? ? 列表名.insert(索引,元素) ? ?使用insert方法指定索引位置插入
? ? ? ? 列表名[首索引:尾索引]=列表 ? ?使用首尾相同索引號(hào)切片賦值插入
????????說(shuō)明
????????使用相加方法新增時(shí)新增的必須為列表;
????????使用切片賦值時(shí),首尾索引相等時(shí),元素插在索引-1位置;
? ? ? ? 使用乘積新增時(shí),乘數(shù)必須為整數(shù),乘數(shù)可以是計(jì)算結(jié)果為整數(shù)的表達(dá)式,當(dāng)乘數(shù)為負(fù)數(shù)或0時(shí),結(jié)果返回空列表;
例:
names=["張三","李四","王五","馬六"]
names=names+["趙七"] ? ?#輸出names返回????['張三', '李四', '王五', '馬六', '趙七']
names=names*2? ?#輸出names返回????['張三', '李四', '王五', '馬六', '張三', '李四', '王五', '馬六']
names.append("趙七") ? ?#輸出names返回????['張三', '李四', '王五', '馬六', '趙七']
names.insert(1,"趙七")?? ?#輸出names返回?????['張三', '趙七', '李四', '王五', '馬六']
names.extend("趙七")?? ?#輸出names返回?????['張三', '李四', '王五', '馬六', '趙', '七']
names.extend(["趙七"])??? ?#輸出names返回????['張三', '李四', '王五', '馬六', '趙七']
names[2:2]="趙七"?? ?#輸出names返回??????['張三', '李四', '趙', '七', '王五', '馬六']
names[2:2]=["趙七" ]?? ?#輸出names返回??????['張三', '李四', '趙七', '王五', '馬六']
修改
列表名[索引]=值 ? ? ? ?通過(guò)索引賦值
列表名[首索引:尾索引:步長(zhǎng)] =值 ? ? 通過(guò)切片賦值
說(shuō)明?
????????通過(guò)索引賦值時(shí),可以賦值所有對(duì)象,且將對(duì)象作為一個(gè)整體賦值;
????????通過(guò)切片賦值時(shí),當(dāng)步長(zhǎng)為1時(shí),可以賦值與切片元素?cái)?shù)不相同的序列,當(dāng)步長(zhǎng)不為1時(shí),只能賦值與切片元素?cái)?shù)相同的序列;
? ? ? ? 通過(guò)切片賦值時(shí),步長(zhǎng)為1時(shí),當(dāng)尾索引小于或等于首索引時(shí),元素插入到首索引-1位置,當(dāng)尾索引大于首索引時(shí),元素將賦值給首索引到尾索引(不包括)之間的元素;
????????通過(guò)切片賦值時(shí),只能賦值序列,且按照序列第一層最小單位元素賦值;
????????使用切片賦值時(shí),步長(zhǎng)為正數(shù)時(shí),元素自左向右賦值,步長(zhǎng)為負(fù)數(shù)時(shí),元素自右向左賦值。
例:
names=["張三","李四","王五","馬六"]
names[2]="趙七"????#?輸出names返回??????['張三', '李四', '趙七', '馬六']
names[2]=("趙七")????#?輸出names返回?????['張三', '李四', '趙七', '馬六']
names[2]=("趙七","周八")?????#?輸出names返回?????['張三', '李四', ('趙七', '周八'), '馬六']
names[2:]="趙七"????#?輸出names返回????['張三', '李四', '趙', '七']
names[2:]=["趙七"]????#?輸出names返回??????['張三', '李四', '?趙七?', '馬六']
names[3:1]="趙七"????#?輸出names返回??????['張三', '李四', '王五', '趙', '七', '馬六']
names[::2]="趙七"?????#?輸出names返回???????['趙', '李四', '七', '馬六']
names[::2]=["趙七","周八"]?????#?輸出names返回????['趙七', '李四', '周八', '馬六']
names[::2]=("趙七","周八")????#?輸出names返回 ? ?['趙七', '李四', '周八', '馬六']
names[::2]=(("趙七"),("周八"))????#?輸出names返回????['趙七', '李四', '周八', '馬六']
names[-1:-2:-1]="趙"????#?輸出names返回????['張三', '李四', '王五', '趙']
names[-1:-2:-1]="趙七"?????#?輸出names返回錯(cuò)誤
刪除
? ??????del 列表名[索引] ? ? ? ?使用函數(shù)刪除索引指定元素
????????del?列表名 ? ? ? 使用函數(shù)刪除列表
????????列表名.pop(索引)????使用函數(shù)刪除索引指定元素
????????列表名[首索引:尾索引]=[] ? ?使用切片賦空索引刪除
說(shuō)明
? ? ? ? 使用切片刪除時(shí)不可以指定步長(zhǎng),當(dāng)步長(zhǎng)為-1時(shí)總返回原列表,無(wú)論首尾索引為何值,為其他不為1的值時(shí)提示錯(cuò)誤;
例:
names=["張三","李四","王五","馬六"]
del names[1]? ? #?輸出names返回????['張三', '王五', '馬六']
names.pop()? ? #?輸出names返回 ? ?['張三', '李四', '王五']
names.pop(1)?? ? #?輸出names返回 ? ?['張三', '王五', '馬六']
names.pop(-1)??? ? #?輸出names返回 ? ??['張三', '李四', '王五']
names[1:3]=[]???? ? #?輸出names返回 ? ??['張三', '馬六']
names[-3:-1:-1]=[]????? ? #?輸出names返回 ? ???['張三', '李四', '王五', '馬六']
3、相關(guān)函數(shù)
names=["張三","李四","王五","馬六"]
operator.eq(list1, list2)
????????比較兩個(gè)列表的元素是否一樣,是返回True,否返回False,使用前需要import operator
print(operator.eq(names,["我","是,","誰(shuí)"])) ? ?#輸出返回????False
len(list)
????????返回列表元素個(gè)數(shù)
print(len(names))?? ?#輸出返回 ? ?4
max(list)
????????返回列表元素最大值
print(max(names))??? ?#輸出返回 ? ?馬六 ? ? ? ?按照什么選擇最大?
print(max('ardjtgoczmd'))???? ?#輸出返回 ? ? z
min(list)
????????返回列表元素最小值
print(min(names))???? ?#輸出返回 ? ??張三?? ? ? ?按照什么選擇最???
list(序列)
????????將序列轉(zhuǎn)換為列表
names=list("我是誰(shuí)") ? ?#輸出names返回????['我', '是', '誰(shuí)']
obj in list
????????判斷對(duì)象是否在列表中存在,存在返回True,不存在返回False
print("張三" in names) ? ?#輸出返回 ? ?True
4、相關(guān)方法
names=["張三","李四","王五","馬六"]
list.append(obj)
????????在列表末尾添加新的對(duì)象,對(duì)象作為一個(gè)整體添加;
names.append([a for a in [1,2,3]])????#?輸出names返回?????['張三', '李四', '王五', '馬六', [1, 2, 3]]
list.count(obj)
????????統(tǒng)計(jì)某個(gè)元素在列表中出現(xiàn)的次數(shù),返回個(gè)數(shù),不存在時(shí)返回0
print(names.count("李四")) ? ?#輸出返回 ? ?1
list.extend(序列)
????????在列表末尾添加新的序列,將序列第一層每個(gè)元素作為單獨(dú)元素添加;
names.extend([a for a in [1,2,3]])????#?輸出names返回????['張三', '李四', '王五', '馬六', 1, 2, 3]
names.extend([a for a in [[0,1],2,3]])????#?輸出names返回?????['張三', '李四', '王五', '馬六', [0, 1], 2, 3]
names.extend("我是誰(shuí)")?????#?輸出names返回??????['張三', '李四', '王五', '馬六', '我', '是', '誰(shuí)']
list.index(obj,首索引,尾索引)
????????從列表檢索區(qū)間中找出某個(gè)值第一個(gè)從左至右匹配項(xiàng)的索引位置,當(dāng)找不到時(shí)返回錯(cuò)誤;
????????檢索區(qū)間按照顧首不顧尾原則;
? ? ? ? 當(dāng)首尾索引相同時(shí),檢索區(qū)間為空,提示錯(cuò)誤;
????????首尾索引可以使用負(fù)數(shù);
? ? ? ? 檢索時(shí)總是從首索引位置向右進(jìn)行檢索,直到尾索引;
print(names.index("李四")) ? ?#輸出返回 ? ?2
print(names.index("李四",-1,0))?? ?#輸出返回錯(cuò)誤
print(names.index("李四",0,-1))?? ?#輸出返回 ? ?1
print(names.index("李四",-4,3))??? ?#輸出返回 ? ?1
list.insert(index, obj)
????????在列表指定索引元素前添加新的對(duì)象,對(duì)象作為一個(gè)整體添加;
????????索引可以使用負(fù)數(shù);
names.insert(1,"周八")?????#?輸出names返回??????['張三', '周八', '李四', '王五', '馬六']
names.insert(-2,"周八")??????#?輸出names返回????['張三', '李四', '周八', '王五', '馬六']
list.pop(obj=list[-1])
????????移除列表中的指定索引元素(默認(rèn)最后一個(gè)元素),并且返回該元素的值;
????????索引可以使用負(fù)數(shù);
? ? ? ? 當(dāng)索引超出界限時(shí)提示錯(cuò)誤;
names.pop(-3)? ? #?輸出names返回??????['張三', '王五', '馬六']
names.pop(0)? ??#?輸出names返回??????['李四', '王五', '馬六']
names.pop()?? ??#?輸出names返回???????['張三', '李四', '王五']
list.remove(obj)
????????移除列表中某個(gè)值的第一個(gè)匹配項(xiàng),當(dāng)未找到時(shí)提示錯(cuò)誤;
? ? ? ? obj不可以是除了字符串的序列;
names.remove("王五")?? ??#?輸出names返回 ? ? ?['張三', '李四', '馬六']
names.remove(["王五"])??? ??#返回錯(cuò)誤
list.reverse()
????????反向列表中元素
names.reverse()??? ??#?輸出names返回 ? ? ?['馬六', '王五', '李四', '張三']
list.sort(key=[func],reverse[True,False])
????????對(duì)原列表進(jìn)行排序,key用于指定用什么來(lái)比較的函數(shù),reverse用于指定是否按照相反順序排列,默認(rèn)值為False
names=["張三","馬六","李四","王五"]
print(names.sort())???? #?輸出錯(cuò)誤
names.sort()?
print(names)????? ??#?輸出names返回 ?? ? ??['張三', '李四', '王五', '馬六']
name2=names.sort
name2()
print(names) ????? ??#?輸出names返回??? ? ??['張三', '李四', '王五', '馬六']
names.sort(reverse=True) ? ?#按反向排序
print(names) ???? ??#?輸出names返回 ? ? ?['馬六', '王五', '李四', '張三']
names.sort(key=id) ? ?#按內(nèi)存地址排序
print(names) ???? ??#?輸出names返回 ?? ? ??['張三', '李四', '王五', '馬六']
????list.copy
? ? 對(duì)原列表進(jìn)行淺拷貝,對(duì)原列表中多層元素進(jìn)行修改時(shí),新列表也會(huì)被修改;
names=["張三","李四",["王五","馬六"]]
name=names.copy
name2=names.copy()
print(name) ??? ??#?輸出name返回新函數(shù)地址 ? ? ? <built-in method copy of list object at 0x0061E6E8>
print(name2)???? ??#?輸出name2返回 ?????["張三","李四",["王五","馬六"]] ?
print(name()) ??? ??#?輸出name返回???? ["張三","李四",["王五","馬六"]]
names[0]="趙七"
names[2][0]="周八"
print(name())???? ??#?輸出name返回????['趙七', '李四', ['周八', '馬六']]
print(name2)???? ??#?輸出name2返回???['張三', '李四', ['周八', '馬六']]
二、元組
????????與列表一樣,元組也是序列,唯一的差別在于元組是不能修改
1、定義方法
例 ? ?(1,2,3)
? ? ? ? (1,)
? ? ? ? tuple('張三', '李四', '王五', '馬六')
注:當(dāng)元組只有一個(gè)元素時(shí),元素后需添加逗號(hào),否則不能定義成元組,只代表被小括號(hào)括起來(lái)的元素
print(names=("趙七")) ? ?#返回????趙七
print(len(("1"))) ? ? #返回 ? ?1
print(len(("1",))) ? ? #返回 ? ?1
2、相關(guān)函數(shù)
????????tuple(序列)
????????將序列第一層每個(gè)元素作為單獨(dú)元素轉(zhuǎn)換為元組;
names=["張三","李四","王五","馬六"]
print(tuple(names)) ? ?#輸出????('張三', '李四', '王五', '馬六')
names="張三"
print(tuple(names)) ?? ?#輸出???? ('張', '三')
2、基本操作方法
????????tuple.index(obj,首索引,尾索引)
????????與列表相同
????????tuple.count(obj)
????????與列表相同