日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

好好学python · 你真的会列表吗(列表推导式质检员)

發布時間:2025/4/5 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 好好学python · 你真的会列表吗(列表推导式质检员) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

你真的會列表

  • 數據類型詳解-列表
    • 列表的定義
    • 列表的基本操作
    • 列表中切片
    • 列表相關函數
    • 深拷貝與淺拷貝
      • 淺拷貝
      • 深拷貝
    • 列表推導式
      • 一,基本的列表推導式使用方式
      • 二,帶有判斷條件的列表推到式
      • 三,對于嵌套循環的列表推到式
      • 練習

數據類型詳解-列表

列表就是一組有序的數據組合,列表中的數據可以被修改

列表的定義

  • 可以使用 中括號進行定義 []
  • 也可以使用 list函數 定義
  • 在定義列表中的元素時,需要在每個元素之間使用逗號,進行分隔。[1,2,3,4]
  • 列表中的元素可以是任意類型的,通常用于存放同類項目的集合

列表的基本操作

  • 列表定義 [ ] , list()
  • 列表相加: 即拼接
  • 列表相乘: 即重復
  • 列表的下標: 實現獲取,更新
  • 列表元素的添加:列表名.append()
  • 列表元素的刪除
    • del 列表[下標]
    • pop()函數 刪除(默認最后一個)并返回被刪元素

列表中切片

列表[開始索引:結束索引:步進值]

  • 列表[開始索引:] ==> 從開始索引到列表的最后
  • 列表[:結束值] ==> 從開始到指定的結束索引之前
  • 列表[開始索引:結束索引] ==> 從開始索引到指定結束索引之前
  • 列表[開始索引:結束索引:步進值] ==> 從指定索引開始到指定索引前結束,按照指定步進進行取值切片
  • 列表[:] 或 列表[::] ==> 所有列表元素的切片
  • 列表[::-1] ==> 倒著獲取列表的元素
  • 示例:

    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 · 你真的会列表吗(列表推导式质检员)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。