一、創建列表,把使用逗號分隔的數據用中括號[ ]括起來即為一個列表,列表也叫數組、list、array;
列表里面也可以再套列表,一個列表里面套一個列表,叫二維數組;一個里面套一個列表,里面的列表再套一個列表,這個叫三維數組,套幾層就是幾維,定義格式如下:
1 list = [] #空列表 2 list1 = ['小白','小黑','小芳','小華','小高'] #普通數組 3 list2 = ['小白',['小黑',500],'小芳','小華','小高'] #二維數組 4 list3 = ['小白',['小黑',500,['anby','joker']],'小芳','小華','小高'] #三維數組
角標、索引
通過下標可取到列表中的元素,下標從0開始計數,也就是說,比如說一個列表,有個5元素,那么它第一個元素下標就是0,第二個就是1,以此類推,最后一個元素的下標可以寫-1,字符串也有下標,和列表一樣
二、列表中添加新元素
b = [1,2,3,4] citys = [] citys.append('北京') #在列表末尾增加一個元素 citys.insert(0,'上海') #insert可指定增加的位置,在列表中0的位置即最前面增加一個元素,一次只能加一個,下標不能寫負數,如果指定的下標不存在,那么就是在末尾添加 citys.extend(b) #合並列表 將b列表中的元素添加到citys中
三、查看列表中的值
print(cities[0]) #通過指定下標索引來訪問列表中的值,這里0即代表查詢列表中第一個元素 print(cities[-1]) #-1代表最后一個元素 print(cities.index('廣州')) #獲取該元素的下標,如果有多個,則返回第一個,如果找不到該元素的話,會報錯 print(cities.count('廣州')) #查看該元素在list里面出現的次數,如果該元素不存在,那么返回0 遍歷列表 for i in list : print(i)
四、修改列表中的值,只能修改已有下標的元素
1 list[1]='南京' #修改指定位置的元素值,指定的下標不存在,會報錯,將角標為1的元素值修改為:南京
五、刪除列表中的值
cities.pop() #刪最后一個元素 cities.pop(0) #刪除指定下標的元素 cities.remove('北京') #刪除指定的元素,有多個相同的元素,刪除第一個 cities.clear() #清空list del cities[-1] #刪除指定下標對應的元素 del cities #刪除整個列表, list刪除后無法訪問 print(cities.pop()) #有返回值 print(cities.remove()) #無返回值
六、列表操作的函數
list.reverse()將列表反轉 #注:list 中有字符串、數字時不能排序,排序針對同類型 list.sort()排序,默認升序 list.sort(reverse=True) 降序排列 len(list) #列表元素個數 max(list) #返回列表元素最大值 min(list) #返回列表元素最小值 list(seq) #將元組轉換為列表 list1+list2 #合並list list*3 #復制列表3次
enumerate 用法(打印元素對應的下標),同時取下標和元素
list = ['a','b','c'] for index,value in enumerate(lists): print(index,value) #打印結果如下: 0 a 1 b 2 c
七、列表list的循環和切片
7.1 循環,如果直接for 循環一個list 的時候,那么每次循環的值都是這個list 里面的元素
for i in list: print (i)
多維數組,是可以循環多個元素的
w =[[1,2,3,4],[2,3,4,5]] for a,b,c,d in w:#多維數組,是可以循環多個元素的 print(a,b,c,d)
7.2 切片,切片也就是另一種方式獲取列表的值,它可以獲取多個元素,可以理解為,從第幾個元素開始,到第幾個元素結束,獲取他們之間的值,格式是name:[1:10],格式是name:[1:10],比如說要獲取name的第一個元素到第五個元素,就可以用name[0:6],切片是不包含后面那個元素的值的,即顧頭不顧尾;前面的下標如果是0的話,可以省略不寫,這樣寫,name[:6],切片后面還有可以寫一個參數,叫做步長,也就是隔多少個元素,取一次,默認可以不寫,也就是隔一個取一次,切片操作也可以對字符串使用,和列表的用法一樣,實例如下:
1 name[n:m] #切片是不包含后面那個元素的值(顧頭不顧尾) 2 3 name[:m] #如果切片前面一個值缺省的話,從開頭開始取 4 5 name[n:] #如果切片后面的值缺省的話,取到末尾 6 7 name[:] #如果全部缺省,取全部 8 9 name[n:m:s] #s:步長 隔多少個元素取一次 10 11 #步長是正數,從左往右取 12 13 #步長是負數,從右往左取 14 15 #注:切片同樣適用於字符串,字符串也有下標 16 17 lis = list(range(1,21)) 18 19 print(lis[:18:-1]) #-1倒序,開頭沒有取值,所以默認從20往左取值,取到18的下標(19),但不顧尾,所以19不取 20 21 #打印結果: 22 [20]
八、列表生成式
列表生成式即List Comprehensions,是Python內置的非常簡單卻強大的可以用來創建list的生成式。
實例1:要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):list = list(range(1,11))
實例2:生成[1x1, 2x2, 3x3, ..., 10x10]可以用 list = list(x * x for x in range(1,11))
實例3:for循環后面還可以加上if判斷,這樣我們就可以篩選出僅偶數的平方:list = list(x * x for x in range(1,11) if x%2== 0)
實例4:使用兩層循環,可以生成全排列:
list = [m + n for m in 'ABC' for n in 'XYZ']
print(list)
輸出結果:['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
實例5:for循環其實可以同時使用兩個甚至多個變量,比如dict的items()可以同時迭代key和value:
法一:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> for k, v in d.items():
... print(k, '=', v)
結果:
y = B
x = A
z = C
九、總結
1,列表是一個有序的對象集合
2,一個對象在另外一個對象中嗎?用 in 來檢查
3,從列表中刪除對象 remove
remove:取一個對象值作為唯一參數。remove方法會從列表中刪除指定數據值的第一次出現。
如果在列表中找到了這個數據值,就會從列表中刪除包含這個值的對象(同時列表的大小減一)。如果在列表中沒有找到這個數據值,會報錯。
4,從列表中彈出對象 pop
pop:取一個可選的索引值(indexof)作為參數。pop方法根據對象的索引值從現有列表刪除和返回一個對象。
如果調用pop時沒有指定索引值,將刪除和返回列表中的最后一個對象。如果指定了一個索引值,則會刪除和返回那個位置上的對象。
如果列表為空或者調用pop時指定了一個不存在的索引值,會報錯。
5,用對象擴展列表 extend
extend:取一個對象列表作為唯一參數。extend方法接收第二個列表,將其中的各個對象增加到現有列表。如果要將兩個列表合並為一個列表,這個方法就非常有用。
6,在列表中插入一個對象 insert/append
insert:取一個索引值和一個對象作為參數。insert 方法將一個對象插入到現有列表中指定索引值的前面。
這樣就可以將對象插入到現有列表的開頭,或者插入到列表中的任何位置。要把對象插入到列表末尾,用append 。用法 num.insert(2,"abc")
7,如何復制一個數據結構?不要使用賦值操作符復制列表;應當使用copy方法。
賦值操作都指向同一個數據,如果修改一個列表,另一個也會改變;如果想讓另一個變量引用一個現有列表,可以使用賦值操作(=)
copy:list2 = list1.copy() ;如果想建立現有列表中對象的副本,用他們初始化一個新列表,就一定要使用copy 方法
8,列表切片的使用【start:stop:step】不包含stop 索引值
step 為正數時,從右至左;step 為負數時,從左至右
十、list小練習
一、檢驗用戶名是否合法需求:
1.輸入賬號:input
2.如果賬號存在,提示:已被注冊,如果不存在,提示:注冊成功 可先定義一個list來存放所有用戶
3.輸入不能為空,可以用strip()方法
4.用戶名6-12位之間 可用len()方法
5.最多可輸入3次,可用循環來控制
all_users =['xianghao','zhangxiaobai','zhangfang'] for i in range(3): username = input('請輸入賬號:').strip() if len(username)>5 and len(username)<13: if all_users.count(username)>0: print('該用戶名已存在') else: print('名字不錯,可以注冊!') break else: print('用戶名長度不合法!長度為6-12之間!') else: print('失敗次數過多')
二、校驗密碼需求
1.密碼必須同時包含大寫字母,小寫字母和數字
2.密碼長度為5-10位
3.最多輸入密碼5次
list1 ={'1','2','3','4','5','6','7','8','9','0'} list2 ={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'} list3 ={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'} for i in range(5): pwd = input('請輸入密碼:').strip() password=set(pwd) if len(pwd) >4 and len(pwd) <11: if len(password & list1) != 0 and len(password & list2) != 0 and len(password & list3) != 0: print('密碼合法!') break else: print('密碼不合法!必須同時包含大寫字母,小寫字母和數字') else: print('密碼長度不合法!長度為5-10位!') else: print('失敗次數過多,請明日再試!')
十一、元祖
元組其實和列表一樣,不一樣的是,元組的值不能改變,一旦創建,就不能再改變了;元組的定義方式是用小括號( );元組只有兩個方法,那就是count和index
如果元組里面 只有一個元素的話,那么你必須在這個元素后面加一個逗號
t = (1,2,4,5,6,7) words=(1,) words2=('abc',) print('t',type(t)) print('words',type(words)) print('words2',type(words2)) print(t.index(2)) #找到元素的下班 print(t.count(2)) #找到元素的個數