什么是列表?
列表就是可變的有序的元素集合错蝴,列表里面的每一個元素都有他的下標(biāo)洲愤,其實python里面的列表就有些像java里面的數(shù)值,
列表的表現(xiàn)形式:從下面這個列表我們可以看出來顷锰,列表是用一對[]柬赐,然后里面的類型是object,什么類型都可以官紫,也可以嵌套列表肛宋;
name=['zhangsan','lisi',18,19,True,[8,6]]
列表的賦值方式:上面就是一種賦值方式,直接賦值束世,還有一個range()函數(shù)也可以完成列表的賦值:這個函數(shù)酝陈,有3個參數(shù),第一個參數(shù)是起始位置毁涉,然后是終點位置沉帮,最后一個是步長,也是左閉右開區(qū)間贫堰;對于range()函數(shù)穆壕,需要注意一點就是在python3里面你用到這個列表的時候才會生成,如果你沒有用到這個列表是不會生成的
age=range(5,91,2)
第二種賦值方式:列表推導(dǎo)式严嗜,用for ?in 語句粱檀,用這種方式可以把一個列表進行克隆或者是說變大或者縮兄薷摇漫玄;
age=[1,2,3,5,7,9,11]
age1=[num for num in age if num%2==0]
print(age1)
列表的常用操作,這個對于列表來說還是比較重要的压彭,就和之前說的字符串的常用操作一樣睦优,主要有四種常用操作:
增:
A:通過append()語句,用于在列表的末尾增加一個元素壮不;
age = [9]
age.append(10)
print(age)
B:通過insert語句汗盘,可以把一個object插入你想插入的地方;
age = [9]
age.insert(0,10)
print(age)
C:通過extend()語句询一,可以把一個列表增加多個值隐孽,但是這些值也是只能增加在最后癌椿;
tag=[2,8,10]
age = [9]
age.extend(tag)
print(age)
D:通過乘法運算和加法運算也可以把列表增加:乘法就是把自己乘多少遍,加法就是在最后連接一個列表菱阵,需要注意一點就是這兩種方式不會修改原列表踢俄;
tag='woshishui'
age = [9]
age*=5
age+=tag
print(age)
刪:
A:pop()語句,刪除對應(yīng)下標(biāo)值的元素晴及;默認(rèn)是-1都办,即最后一個元素;
age=[1,2,3,4,5,6,7,8]
age.pop(0)
print(age)
B:remove()語句虑稼,刪除對應(yīng)的object元素琳钉,默認(rèn)是移除最左邊的一個object
age=[1,2,3,4,5,6,7,8]
age.remove(1)
print(age)
C:del語句,這個就厲害了蛛倦,這個會刪除內(nèi)存地址歌懒,即會把你的存儲空間都刪掉
age=[1,2,3,4,5,6,7,8]
del age
改:可以通過下標(biāo)值去直接修改object,需要注意的是[]里面的值是下標(biāo)值;
age = [1, 2, 3, 4, 5, 6, 7, 8]
age[1] = 8
print(age)
查:
A:獲取單個元素
age = [1, 2, 3, 4, 5, 6, 7, 8]
print(age[2])
B:獲取元素索引溯壶,Index()語句歼培,第一個元素是object值,第二個元素是起始位置茸塞,第三個元素是終點位置躲庄;
age = [1, 2, 3, 4, 5, 6, 7, 8,2,8,2]
print(age.index(2,-2))
C:獲取指定元素個數(shù):count()
age = [1, 2, 3, 4, 5, 6, 7, 8,2,8,2]
print(age.count(2))
D:切片,就和string一個形式钾虐,第一個參數(shù)是起始位置噪窘,第二個參數(shù)是終點位置,第三個參數(shù)是步長效扫,需要注意一點就是中間是用:間隔符倔监;如果步長是負(fù)數(shù),就是從最后一個開始往前面取值菌仁,
age = [1, 2, 3, 4, 5, 6, 7, 8, 2, 8, 2]
print(age[1:8: 2])
E:反轉(zhuǎn)[::-1]
age = [1, 2, 3, 4, 5, 6, 7, 8, 2, 8, 2]
print(age[:: -1])
F:遍歷
F.1通過元素進行遍歷:
age = ['a','v','f','g','s','w']
for v in age:
????print(v)
F.2通過索引進行遍歷:首先應(yīng)該得到元素的索引浩习,然后通過索引就能拿到元素的值了:
age = ['a','v','f','g','s','w']
indexs=range(len(age))
for v in indexs:
????print(age[v])
F.3通過枚舉對象遍歷:通過枚舉函數(shù),將一個可遍歷的對象生成一個新的對象济丘,這個對象的每一個元素都包含之前對象的下標(biāo)和對應(yīng)值谱秽;由于枚舉對象的每一個元素都是一個元祖對象,所以也可以這樣寫 a,b
age = ['a','v','f','g','s','w'] ? ? ? ? ? ? ? ? ? ? ? ? ? ?
enum =enumerate(age)
for e in enum:
????print(e)
age = ['a','v','f','g','s','w']
enum =enumerate(age)
for a,b in enum:
????print(a,b)
F.4通過迭代器進行遍歷:在講通過迭代器進行遍歷之前摹迷,需要講兩個概念一個就是可迭代對象疟赊,一個是迭代器,可迭代對象實際上就是指這個對象擁有遍歷的這個屬性峡碉,可以使用for in進行遍歷近哟,那么這個對象就是可迭代對象,另外一個使用一個函數(shù)進行驗證鲫寄,isinstance吉执,這個函數(shù)相當(dāng)于是判斷這個對象是否擁有這個能力疯淫,
判斷是否可迭代
import collections
age = ['a','v','f','g','s','w']
result=isinstance(age,collections.Iterable)
print(result)
那么什么又是迭代器呢,迭代器是可以記錄遍歷位置的對象戳玫,也就是說你把一個列表轉(zhuǎn)成迭代器之后峡竣,迭代器本身就擁有了遍歷的能力了,也就是可以自己完成遍歷了量九,當(dāng)然迭代器也是可迭代對象适掰,所以自然也可以用for in 語句,把一個可迭代對象轉(zhuǎn)成迭代器使用:iter()函數(shù)荠列;判斷是否是迭代器也有兩種方式类浪,第一就是可不可以自己完成遍歷過程,也就是調(diào)用next()函數(shù)肌似,第二也是用isinstance函數(shù)费就,
it=iter(age)
result=isinstance(it,collections.Iterator)
next(it)
print(result)
===========================
it=iter(age)
result=isinstance(it,collections.Iterator)
next(it) for i in it:
????print(i)
print(result)
迭代器的優(yōu)點:節(jié)約內(nèi)存空間,他只有一個內(nèi)存地址保存當(dāng)前遍歷到的對象川队,這之前力细,之后的對象都沒有分配內(nèi)存地址,也提供了統(tǒng)一的針對可迭代對象進行遍歷的接口固额;需要注意一點是迭代器只能迭代一次眠蚂,不能多次使用;
G:判定斗躏,判斷一個元素是否在一個集合里面逝慧,用in ?not in語句;
age = ['a','v','f','g','s','w']
newStr='a'
newStr1='l'
result=newStr in age
result1=newStr1 not in age
print(result,result1)
H:比較啄糙,對于比較的話笛臣,python2用的是cmp()函數(shù),而python3用的是比較符:> < ==
H.1 python3:
list = [1, 9, 6]
list1 = [1, 8, 7]
resule = list > list1
print(resule)
H.2 python2
list = [1, 9, 6]
list1 = [1, 8, 7]
result=cmp(list1,list)
print(result)
I.排序隧饼,有兩種方式沈堡,一種就是用內(nèi)建函數(shù),sorted,第二種用列表對象方法燕雁,list.sort()兩種方法都是大同小異诞丽,先說第一種:
list=['k','a','s','w','j']
result=sorted(list,reverse=True)
print(result)
reverse控制的是增序,還是降序贵白,默認(rèn)是增序率拒,設(shè)置為True就是降序崩泡;還有一種情況就是指定排序的元素禁荒,比如:這種情況就針對一個元素有多個值得情況,我們可以讓它對哪個進行排序角撞;
list=[('n',5),('w',8),('h',9),('t',1),('b',3),('l',7)]
def getkey(x):
????return x[1]
result=sorted(list,key=getkey)
print(result)
list.sort()方法呛伴,是針對于列表本身得勃痴,所以通過這種方式改變得是列表本身,也并沒有返回值热康,sorted方法呢沛申,是內(nèi)建函數(shù),他不會改變列表本身姐军,只會將列表排好序之后返回出來铁材;
J:亂序,就是把列表得順序打亂奕锌,通過得是random得shuffle()函數(shù)著觉,打亂得是列表本身
list=[('n',5),('w',8),('h',9),('t',1),('b',3),('l',7)]
random.shuffle(list)
print(list)
K:反轉(zhuǎn),兩種方式惊暴,一種是直接調(diào)用:reverse()饼丘,這種方式反轉(zhuǎn)得是列表自己,另一種用切片反轉(zhuǎn)辽话;這種方式肄鸽,列表不會改變:
list.reverse()
res=list[::-1]
好了 ,列表所有操作結(jié)束了油啤;