Python內置的一種數據類型是列表:list。
list是一種有序的集合,可以隨時添加和刪除其中的元素。通過下標訪問列表中的元素(又稱索引、角標),下標從0開始計數。
list定義,使用中括號[]。
list1 = [1,2,3,4] #一個普通的數組 list2 = ['marry','lily',[50,'monkey']] #二維數組 list3 = ['name','sex',['lily',124,['aaaa','bbb']]] #三維數組,嵌套幾層就是幾維
1、list的增、刪、改、查
#增 name=['牛牛','帆帆','月月',666,'aaa',68.99]#定義一個list列表 name.append('小月')# 默認在最后面添加元素 print(name) name.insert(0,'小軍')#指定下標位置添加元素 print(name) 執行結果如下: ['牛牛', '帆帆', '月月', 666, 'aaa', 68.99, '小月'] ['小軍', '牛牛', '帆帆', '月月', 666, 'aaa', 68.99, '小月'] #改 name=['牛牛','帆帆','月月',666,'aaa',68.99]#定義一個list列表 print('修改之前:',name) name[0]='曉紅'#指定下標0的元素修改成“曉紅” print('修改之后:',name) 執行結果如下: 修改之前: ['牛牛', '帆帆', '月月', 666, 'aaa', 68.99] 修改之后: ['曉紅', '帆帆', '月月', 666, 'aaa', 68.99] #查 name=['牛牛','帆帆','月月',666,'aaa',68.99]#定義一個list列表 print(name[0]) # 獲取第一個元素 print(name[-1]) # -1代表最后一個元素 執行結果如下: 牛牛 68.99 #刪 name.remove('aaa') # 刪除指定的值,如果有兩個一樣的,只會刪除前面的 del name[0] # 刪除指定位置的值 name.pop() # 不傳入下標的話,刪除最后一個值,傳入下標刪除指定位置的值 name.clear() # 清空列表
2、list其他常用操作方法
name=['大牛','帆帆','月月',666,'aaa',68.99]#定義一個list列表 name2 = [1, 2, 3, 4, ['hehe', 'haha']] print(len(name))#獲取個數/長度 print(name.index('帆帆')) # 取索引 print(name.count('帆帆')) # 取帆帆出現的次數 print(name*2)#乘法 print(name+name2)#加法 name.reverse() # 反轉的寫法之一 name.sort(reverse=True)#反轉寫法之二 name.extend(name2) # 擴展列表,也就是把name2的值加到name里面 print("hello" in name)#檢查成員
3、切片
切片也就是另一種方式獲取列表的值,它可以獲取多個元素,可以理解為,從第幾個元素開始,到第幾個元素結束,獲取他們之間的值。
格式是name:[0:6],意思說要獲取name的第一個元素到第五個元素,切片是不包含后面那個元素的值的,記住顧頭不顧尾。
切片后面還有可以寫一個參數,叫做步長,也就是每幾個元素,取一次,切片操作也可以對字符串使用,和列表的用法一樣。
(1)列表切片
l=list(range(1,11))#自動生成1-10的數,然后類型轉換成列表list print(l) print(l[0:4])#顧頭不顧尾,取下標0,1,2,3 print(l[:5])#如果最前面沒有寫的話,代表從0開始取 print(l[4:])#如果冒號后面沒有寫,代表取到最后 print(l[:]) print(l[0:8:2])#步長,每2個取一個 print(l[::2]) print(l[1::2])#打印1-10的所有偶數 print(l[::2])#打印1-10的所有奇數 print(l[::-2])#如果步長是負數,那么從右往左取值
(2)多維數組的切片
nums1=[1,2,3,[4,56]] nums2=[1,2,3,4,['a','b','c','d','e',['一','二','三']],['四','五']] #三維數組 print(nums1[3][1])#要取56 print(nums2[4][5][1])#二 print(nums2[-1][-1])#五
(3)字符串切片
for i in range(10): s=input('請輸入一個字符串:') if len(s)<2: print('請輸入大於2位的字符串') elif s==s[::-1]: print('是回文') else: print('不是回文')
4、枚舉函數
enumerate()是python的內置函數,enumerate在字典上是枚舉、列舉的意思。
對於一個可迭代的(iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值。
enumerate多用於在for循環中得到計數。
# i存的是下標 for i,j in enumerate(('a','b','c')): print(i,j) pwd=['123','456','789'] for index,p in enumerate(pwd): pwd[index] = 'abd_' + p print(pwd)
5、小練習
注冊,校驗用戶是否存在,如果用戶不存在就說明可以注冊
users=['大發','冰冰','111'] for i in range(5): username=input('請輸入用戶名:') # if users.count(username)>0: if username in users: #以上兩種方法都可以,in是判斷在不在里面 print('用戶名已注冊') else: print('用戶未注冊') users.append(username)#將用戶名添加到列表中 print(users) break else: print('輸入次數過多')
6、list循環
我們來做一個小練習:使用循環去掉奇數,只留下偶數。
(1)循環的錯誤方法
# 錯誤方法舉例:如果用下面何種方法去做,下標會錯誤,刪除時會導致一些元素被跨過 l=[1,1,1,2,3,4,5] for i in l: if i%2!=0:#取余不為0,說明是奇數 l.remove(i) print(l) # [1, 2, 4]
(2)循環的正確方法
# 正確方法:復制一個list,循環l2,從l1里面刪,這樣就不會出錯了,因為2的下標沒有錯亂 l=[1,1,1,2,3,4,5] l2=[1,1,1,2,3,4,5] for i in l2: if i%2!=0: l.remove(i) print(l) # [2, 4]
(3)深拷貝、淺拷貝
當字符串很長很大的時候,直接手動復制list很費勁,那我們可以使用深拷貝的方法,下面我們看看深拷貝和淺拷貝的區別
#淺拷貝,兩個變量的內存地址是一樣的,這種方法循環刪除文件是不行的,會相互影響 l=[1,1,1,2,3,4,5] l2=l l2=l.copy() # 深拷貝,是兩個內存地址。復制一個list的意思 import copy l2=copy.deepcopy(l) #打印內存地址看一下深拷貝后兩個的內存地址是不是變啦 print(id(l)) print(id(l2))