好好学python · 你真的会列表吗(列表推导式质检员)
生活随笔
收集整理的這篇文章主要介紹了
好好学python · 你真的会列表吗(列表推导式质检员)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
你真的會列表
- 數據類型詳解-列表
- 列表的定義
- 列表的基本操作
- 列表中切片
- 列表相關函數
- 深拷貝與淺拷貝
- 淺拷貝
- 深拷貝
- 列表推導式
- 一,基本的列表推導式使用方式
- 二,帶有判斷條件的列表推到式
- 三,對于嵌套循環的列表推到式
- 練習
數據類型詳解-列表
列表就是一組有序的數據組合,列表中的數據可以被修改
列表的定義
- 可以使用 中括號進行定義 []
- 也可以使用 list函數 定義
- 在定義列表中的元素時,需要在每個元素之間使用逗號,進行分隔。[1,2,3,4]
- 列表中的元素可以是任意類型的,通常用于存放同類項目的集合
列表的基本操作
- 列表定義 [ ] , list()
- 列表相加: 即拼接
- 列表相乘: 即重復
- 列表的下標: 實現獲取,更新
- 列表元素的添加:列表名.append()
- 列表元素的刪除
- del 列表[下標]
- pop()函數 刪除(默認最后一個)并返回被刪元素
列表中切片
列表[開始索引:結束索引:步進值]
示例:
varlist = ['劉德華','張學友','張國榮','黎明','郭富城','小沈陽','劉能','宋小寶','趙四']# 從開始索引到列表的最后 res = varlist[2:] # ['張國榮','黎明','郭富城','小沈陽','劉能','宋小寶','趙四'] # 從開始到指定的結束索引之前 res = varlist[:2] # ['劉德華','張學友'] # 從開始索引到指定結束索引之前 res = varlist[2:6] # ['張國榮', '黎明', '郭富城', '小沈陽'] # 從指定索引開始到指定索引前結束,按照指定步進進行取值切片 res = varlist[2:6:2] # ['張國榮', '郭富城'] # 所有列表元素的切片 res = varlist[:] res = varlist[::] # 倒著輸出列表的元素 res = varlist[::-1]# 使用切片方法 對列表數據進行更新和刪除 print(varlist)# 從指定下標開始,到指定下標前結束,并替換為對應的數據(容器類型數據,會拆分成每個元素進行賦值) # varlist[2:6] = ['a','b','c',1,2,3] # varlist[2:6:2] = ['a','b'] # 需要與要更新的元素個數對應# 切片刪除 # del varlist[2:6] del varlist[2:6:2]列表相關函數
varlist = ['劉德華','張學友','張國榮','張學友','黎明','郭富城','小沈陽','劉能','宋小寶','趙四']# len() 檢測當前列表的長度,列表中元素的個數 res = len(varlist)# count() 檢測當前列表中指定元素出現的次數 res = varlist.count('張學友')# append() 向列表的尾部追加新的元素,返回值為 None varlist.append('川哥')# insert() 可以向列表中指定的索引位置添加新的元素, varlist.insert(20,'aa')# pop() 可以對指定索引位置上的元素做 出棧 操作,返回出棧的元素 res = varlist.pop() # 默認會把列表中的最后一個元素 出棧 res = varlist.pop(2) # 會在列表中把指定索引的元素進行 出棧varlist = [1,2,3,4,11,22,33,44,1,2,3,4] # remove() 可以指定列表中的元素 進行 刪除,只刪除第一個。如果沒有找到,則報錯 res = varlist.remove(1)# index() 可以查找指定元素在列表中第一次出現的索引位置 # res = varlist.index(1) # res = varlist.index(1,5,20) # 可以在指定索引范圍內查找元素的索引位置# extend() 接收一個容器類型的數據,把容器中的元素追加到原列表中 # varlist.extend('123')# s.clear() # 清空列表內容 # varlist.clear()# reverse() 列表翻轉 varlist.reverse()# sort() 對列表進行排序 res = varlist.sort() # 默認對元素進行從小到大的排序 res = varlist.sort(reverse=True) # 對元素進行從大到小的排序 res = varlist.sort(key=abs) # 可以傳遞一個函數,按照函數的處理結果進行排序深拷貝與淺拷貝
淺拷貝
使用copy函數后,新列表中的多維列表或容器與原列表使用同一地址。即改變一處,則新舊列表中均改變
# 淺拷貝 只能拷貝當前列表,不能拷貝列表中的多維列表元素varlist = [1,2,3] # 簡單的拷貝 就可以把列表復制一份 newlist = varlist.copy() # 對新拷貝的列表進行操作,也是獨立的 del newlist[1] # print(varlist,id(varlist)) # print(newlist,id(newlist)) ''' [1, 2, 3] 4332224992 [1, 3] 4332227552 '''# 多維列表 varlist = [1,2,3,['a','b','c']]# 使用copy函數 拷貝一個多維列表 newlist = varlist.copy()''' print(newlist,id(newlist)) print(varlist,id(varlist)) [1, 2, 3, ['a', 'b', 'c']] 4361085408 [1, 2, 3, ['a', 'b', 'c']] 4361898496 ''' # 如果是一個被拷貝的列表,對它的多維列表元素進行操作時,會導致原列表中的多維列表也發生了變化 del newlist[3][1]''' 通過id檢測,發現列表中的多維列表是同一個元素(對象) print(newlist[3],id(newlist[3])) print(varlist[3],id(varlist[3])) ['a', 'c'] 4325397360 ['a', 'c'] 4325397360 '''深拷貝
解決淺拷貝的問題,均使用新地址
使用copy模塊中的 deepcopy 函數可以完成深拷貝
# 深拷貝 就是不光拷貝了當前的列表,同時把列表中的多維元素也拷貝了一份 import copyvarlist = [1,2,3,['a','b','c']]# 使用 copy模塊中 深拷貝方法 deepcopy newlist = copy.deepcopy(varlist) del newlist[3][1]print(varlist) print(newlist)'''print(newlist[3],id(newlist[3]))print(varlist[3],id(varlist[3]))['a', 'c'] 4483351248['a', 'b', 'c'] 4483003568 '''列表推導式
List-Comprehensions
列表推導式提供了一個更簡單的創建列表的方法。
常見的用法是把某種操作應用于序列或可迭代對象的每個元素上,然后使用其結果來創建列表,或者通過滿足某些特定條件元素來創建子序列。
采用一種表達式的當時,對數據進行過濾或處理,并且把結果組成一個新的列表
一,基本的列表推導式使用方式
結果變量 = [變量或變量的處理結果 for 變量 in 容器類型數據]
示例:
# 1 假設我們想創建一個平方列表# 使用普通方法完成 varlist = [] for i in range(10):varlist.append(i**2) # print(varlist) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 使用 map函數和list完成 varlist = list(map(lambda x: x**2, range(10))) # print(varlist) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 使用列表推到式完成 下面這個列表推到式和第一種方式是一樣的 varlist = [i**2 for i in range(10)] # print(varlist) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 2。 '1234' ==> [2,4,6,8] # 常規方法完成需求 varstr = '1234' newlist = [] for i in varstr:newlist.append(int(i)*2) # print(newlist) # [2, 4, 6, 8]# 使用列表推到式完成上面的需求 newlist = [int(i)*2 for i in varstr] # print(newlist) # [2, 4, 6, 8]# 使用列表推到式+位運算完成 newlist = [int(i) << 1 for i in varstr] # print(newlist) # [2, 4, 6, 8]二,帶有判斷條件的列表推到式
結果變量 = [變量或變量的處理結果 for i in 容器類型數據 條件表達式]
示例:
# 0-9 求所有的偶數,==> [0, 2, 4, 6, 8] # 常規方法完成 newlist = [] for i in range(10):if i % 2 == 0:newlist.append(i) # print(newlist) # [0, 2, 4, 6, 8]# 列表推到式完成 newlist = [i for i in range(10) if i % 2 == 0] # print(newlist) # [0, 2, 4, 6, 8]三,對于嵌套循環的列表推到式
''' # 下面這個 3x4的矩陣,它由3個長度為4的列表組成,交換其行和列 [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12], ]==> [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12] ] ''' arr = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12], ]# 常規方法完成 # newlist = [] # for i in range(4): # res = [] # for row in arr: # res.append(row[i]) # newlist.append(res) # print(newlist)# 使用列表推到式完成 newlist = [[row[i] for row in arr] for i in range(4)] print(newlist)練習
#行轉列,列轉行 arr = [[1,2,3,4],[5,6,7,8],[9,8,10,11,12], ] newlist = [[row[i] for row in arr] for i in range(4)] #使用列表推導式完成九九乘法表list = [[f'{x}×{y}={x*y}' for y in range(1,x+1)] for x in range(1,10)]print(list) # 字典轉化為列表vardic = {'user':'admin','age':20,'phone':'123'}varlist=[f'{i}={vardic[i]}' for i in vardic]print(varlist) # 把列表中的所有字符全部轉為小寫varlist = ['AAAAqA','bbbiubisAAAA','ccccccAAAAWQQE']newlist=[i.lower() for i in varlist]print(newlist) # x是0-5之間的偶數,y是0-5之間的奇數,把x,y組成元組放在列表中varlist = [(i,j) for j in range(5) if j % 2!= 0 for i in range(5) if i % 2 ==0]print(varlist) # 倒序實現九九乘法表varlist = [[f'{i}×{j} = {i*j}' for j in range(1,i)] for i in range(9,0,-1)]總結
以上是生活随笔為你收集整理的好好学python · 你真的会列表吗(列表推导式质检员)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好好学python · 字符串(find
- 下一篇: 好好学python · 元组