列表和元組篇

概述

? ? ? ? 列表、元組和字符串同屬于序列的一種,都有序列的特點(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)

????????與列表相同

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,840評(píng)論 18 399
  • 一、基礎(chǔ)知識(shí):1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,575評(píng)論 0 4
  • 剛才我問(wèn)張劍(秘書),上午胡縣長(zhǎng)簽批件仍沒有淮高的。他說(shuō)李部長(zhǎng)昨天也打電話間了。馬明友匯報(bào)。 ...
    馬明友閱讀 101評(píng)論 0 0
  • 你在哪里?你在時(shí)間里。你在哪里?你在我的眼里。你在哪里?你在生命里。你在哪里?你在晃晃世界里。 你在哪里?你在浮塵...
    萬(wàn)象峰年閱讀 253評(píng)論 0 2
  • 今年3月,一只兩個(gè)月大的英短折耳貓成為了我的家庭成員,一時(shí)沖動(dòng),我的生活就布滿了毛,衣服上、床上、沙發(fā)上、地上、空...
    愿一塵不染閱讀 691評(píng)論 0 2

友情鏈接更多精彩內(nèi)容