欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python之列表推導(dǎo)式最全匯總(上篇)

 更新時(shí)間:2023年01月12日 14:43:12   作者:Hann?Yang  
這篇文章主要介紹了Python之列表推導(dǎo)式最全匯總(上篇),本文章內(nèi)容詳細(xì),通過案例可以更好的理解列表推導(dǎo)式的相關(guān)知識,本模塊分為了三部分,本次為上篇,需要的朋友可以參考下

前言 

網(wǎng)傳的七天學(xué)Python的路線如下,我覺得可以在學(xué)過此表中前幾天的內(nèi)容后,就可以回頭來學(xué)習(xí)一下

列表推導(dǎo)式:它綜合了列表、for循環(huán)和條件語句。

第一天:基本概念(4小時(shí)) : print,變量,輸入,條件語句。

第二天:基本概念(5小時(shí)) :列表,for循環(huán),while循環(huán),函數(shù),導(dǎo)入模塊。

第三天:簡單編程問題(5小時(shí)) :交換兩個(gè)變量值,將攝氏度轉(zhuǎn)換為華氏溫度,求數(shù)字中各位數(shù)之和, 判斷某數(shù)是否為素?cái)?shù), 生成隨機(jī)數(shù),刪除列表中的重復(fù)項(xiàng)等等。

第四天:中級編程問題(6小時(shí)) :反轉(zhuǎn)-個(gè)字符串(回文檢測),計(jì)算最大公約數(shù),合并兩個(gè)有序數(shù)組,猜數(shù)字游戲,計(jì)算年齡等等。

第五天:數(shù)據(jù)結(jié)構(gòu)(6小時(shí)) :棧,隊(duì)列,字典,元組,樹,鏈表。

第六天:面向?qū)ο缶幊?OOP) (6小時(shí)) :對象,類,方法和構(gòu)造函數(shù),面向?qū)ο缶幊讨^承。

第七天:算法(6小時(shí)) :搜索(線性和二分查找)、 排序(冒泡排序、 選擇排序)、遞歸函數(shù)(階乘、斐波那契數(shù)列)時(shí)間復(fù)雜度(線性、二次和常量)。

列表推導(dǎo)式

  • list comprehension或譯為列表解析式,是一種創(chuàng)建列表的簡潔語法;
  • 也可認(rèn)為它是一個(gè)簡版的for循環(huán),但執(zhí)行效率高于for循環(huán)。
  • python 2.7+ 開始又引入了集合推導(dǎo)式、字典推導(dǎo)式,原理與列表推導(dǎo)式相近。

語法規(guī)范:

out_list = [out_express for out_express in input_list if out_express_condition]

其中,

  • if 條件可有可無;
  • for 循環(huán)可以嵌套多層,內(nèi)外層循環(huán)的變量不可以同名;
  • 推導(dǎo)式中也可以嵌套推導(dǎo)式,內(nèi)外層推導(dǎo)式的變量互不影響,可以同名;
  • 推導(dǎo)表達(dá)式out_express盡可能用內(nèi)置函數(shù),省得import或def function()。

入門實(shí)例

>>> [i for i in range(20)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> [i for i in range(40) if i%2==0]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38]
>>> [i*2 for i in range(20)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38]
>>> [i+j for i in range(5) for j in range(5)]
[0, 1, 2, 3, 4, 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7, 4, 5, 6, 7, 8]
>>> [i+j for i in range(10) for j in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 5, 6,
 7, 8, 9, 10, 11, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 4, 5, 6, 7, 8, 9, 10, 11,
 12, 13, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 6, 7, 8, 9, 10, 11, 12, 13, 14,
 15, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 8, 9, 10, 11, 12, 13, 14, 15, 16,
 17, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
>>> {i+j for i in range(10) for j in range(10)}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18}
>>> [(i,j,k) for i in 'abc' for j in range(2) for k in range(2)]
[('a', 0, 0), ('a', 0, 1), ('a', 1, 0), ('a', 1, 1), ('b', 0, 0), ('b', 0, 1),
 ('b', 1, 0), ('b', 1, 1), ('c', 0, 0), ('c', 0, 1), ('c', 1, 0), ('c', 1, 1)]
>>> [chr(i) for i in range(97,123)]
['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']
>>> {i:ord(i) for i in [chr(i) for i in range(97,123)]}
{'a': 97, 'b': 98, 'c': 99, 'd': 100, 'e': 101, 'f': 102, 'g': 103, 'h': 104,
 'i': 105, 'j': 106, 'k': 107, 'l': 108, 'm': 109, 'n': 110, 'o': 111, 'p': 112,
 'q': 113, 'r': 114, 's': 115, 't': 116, 'u': 117, 'v': 118, 'w': 119, 'x': 120,
 'y': 121, 'z': 122}
>>> dic={i:ord(i) for i in [chr(i) for i in range(97,123)]}
>>> dic['x']
120
>>> 

注:

  • 列表推導(dǎo)式外用‘[...]’,換成‘{...}’就是集合推導(dǎo)式;有鍵值對就是字典推導(dǎo)式。
  • 推導(dǎo)式外用‘(...)’會得到一個(gè)“生成器”,如果需要“元組推導(dǎo)式”另要用tuple()函數(shù)轉(zhuǎn)換;
  • 生成器還有一個(gè)特性,只能被遍歷一次,遍歷過后就會被清空。
>>> (i for i in range(20))
<generator object <genexpr> at 0x0000000002CF3890>
>>> type(i for i in range(20))
<class 'generator'>
>>> tuple(i for i in range(20))
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)
>>> 
>>> g = (i for i in range(10))
>>> g
<generator object <genexpr> at 0x03CE71E8>
>>> a = [i for i in g]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b = [i for i in g]
>>> b
[]
>>>

生成過程

>>> [i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
#這個(gè)推導(dǎo)式用for循環(huán)賦值的代碼:

my_list = []
for i in range(10):
    my_list.append(i)
print(my_list)

注:

  • 當(dāng)然這么簡單的列表,可以不用推導(dǎo)式更不需要寫代碼來生成。
  • python有更加省事的方法來直接賦值:

方法一:

>>> a = []; a[:] = range(10)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>

方法二

此方法是我在學(xué)習(xí)用星號“*”給序列解包時(shí)偶爾試出來的

>>> *a,=range(10)  # 此處變量a后的逗號“,”必不可少
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> 
>>> # 或者:
>>> a = [*range(10)]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> 
>>> # 若要取部分,把不要的元素“賦值”給下劃線 _
>>> _,*a=range(10)
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> 
>>> # 元組的賦值,結(jié)尾用逗號:
>>> tp = *range(1,11),
>>> tp
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
>>>

序列解包 * :

>>> Cards = [*range(2,10),*list('TJQKA')]
>>> Cards
[2, 3, 4, 5, 6, 7, 8, 9, 'T', 'J', 'Q', 'K', 'A']
>>> Cards = *range(2,10),*tuple('TJQKA')
>>> Cards
(2, 3, 4, 5, 6, 7, 8, 9, 'T', 'J', 'Q', 'K', 'A')
>>>  # tuple 賦值時(shí)連最外的()都可以省掉

map()函數(shù)解包 * 

>>> n = 12345678
>>> [int(i) for i in str(n)]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> [*map(int,str(n))]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> 

還有一個(gè)特別的:單循環(huán)的變量可用 _ 代替:

>>> [_ for _ in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [_*_ for _ in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> [str(_) for _ in range(2,10)]
['2', '3', '4', '5', '6', '7', '8', '9']
>>> 

列表元素間的運(yùn)算

# 加法
>>> listAdd = lambda a,b:[i+j for m,i in enumerate(a) for n,j in enumerate(b) if m==n]
>>> a = [1,2,3,4]
>>> b = [2,4,7,11,16]
>>> listAdd(a,b)
[3, 6, 10, 15]
>>> listAdd([0]+a,b)
[2, 5, 9, 14, 20]
>>> listAdd(a,b[1:])
[5, 9, 14, 20]
>>> listAdd(a[1:],b)
[4, 7, 11]
>>> 
# 其它運(yùn)算
>>> listOP = lambda a,b,c=0:[i-j if c==2 else i*j if c==3 else i/j if c==4 else i//j if c==5 else i%j if c==6 else i+j for m,i in enumerate(a) for n,j in enumerate(b) if m==n]
>>> a = [1,2,3,4]
>>> b = [2,4,7,11,16]
>>> listOP(a,b)
[3, 6, 10, 15]
>>> listOP(a,b,1)
[3, 6, 10, 15]
>>> listOP(a,b,2)
[-1, -2, -4, -7]
>>> listOP(b,a,2)
[1, 2, 4, 7]
>>> listOP(a,b,2)
[-1, -2, -4, -7]
>>> listOP(a,b,3)
[2, 8, 21, 44]
>>> listOP(a,b,4)
[0.5, 0.5, 0.42857142857142855, 0.36363636363636365]
>>> listOP(b,a,4)
[2.0, 2.0, 2.3333333333333335, 2.75]
>>> listOP(a,b,5)
[0, 0, 0, 0]
>>> listOP(b,a,5)
[2, 2, 2, 2]
>>> listOP(b[1:],a,5)
[4, 3, 3, 4]
>>> listOP(a,b,6)
[1, 2, 3, 4]
>>> listOP(b,a,6)
[0, 0, 1, 3]
>>> listOP(b[2:],a,6)
[0, 1, 1]
>>> 

附錄

到此這篇關(guān)于Python之列表推導(dǎo)式最全匯總(上篇)的文章就介紹到這了,其他兩個(gè)部分的內(nèi)容(中、下篇)請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python3實(shí)現(xiàn)的判斷環(huán)形鏈表算法示例

    Python3實(shí)現(xiàn)的判斷環(huán)形鏈表算法示例

    這篇文章主要介紹了Python3實(shí)現(xiàn)的判斷環(huán)形鏈表算法,涉及Python針對環(huán)形鏈表的遍歷、判斷相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • Python?sklearn?中的?make_blobs()?函數(shù)示例詳解

    Python?sklearn?中的?make_blobs()?函數(shù)示例詳解

    make_blobs()?是?sklearn.datasets中的一個(gè)函數(shù),這篇文章主要介紹了Python?sklearn?中的?make_blobs()?函數(shù),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • 使用python把json文件轉(zhuǎn)換為csv文件

    使用python把json文件轉(zhuǎn)換為csv文件

    這篇文章主要介紹了使用python把json文件轉(zhuǎn)換為csv文件,幫助大家更好的利用python處理數(shù)據(jù),感興趣的朋友可以了解下
    2021-03-03
  • Python快速簡單生成矩形詞云

    Python快速簡單生成矩形詞云

    這篇文章主要介紹了Python快速簡單生成矩形詞云的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 詳解python的xlwings庫讀寫excel操作總結(jié)

    詳解python的xlwings庫讀寫excel操作總結(jié)

    這篇文章主要介紹了詳解python的xlwings庫讀寫excel操作總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python讀取txt文件中特定位置字符的方法

    python讀取txt文件中特定位置字符的方法

    今天小編就為大家分享一篇python讀取txt文件中特定位置字符的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 利用python開發(fā)app實(shí)戰(zhàn)的方法

    利用python開發(fā)app實(shí)戰(zhàn)的方法

    這篇文章主要介紹了利用python開發(fā)app實(shí)戰(zhàn)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python報(bào)錯(cuò):ModuleNotFoundError的解決辦法

    Python報(bào)錯(cuò):ModuleNotFoundError的解決辦法

    "ModuleNotFoundError: No module named 'xxx'"這個(gè)報(bào)錯(cuò)是個(gè)非常常見的報(bào)錯(cuò),幾乎每個(gè)python程序員都遇到過,下面這篇文章主要給大家介紹了關(guān)于Python報(bào):ModuleNotFoundError錯(cuò)誤的解決辦法,需要的朋友可以參考下
    2022-06-06
  • pandas pd.read_csv()函數(shù)中parse_dates()參數(shù)的用法說明

    pandas pd.read_csv()函數(shù)中parse_dates()參數(shù)的用法說明

    這篇文章主要介紹了pandas pd.read_csv()函數(shù)中parse_dates()參數(shù)的用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 淺析Python 序列化與反序列化

    淺析Python 序列化與反序列化

    這篇文章主要介紹了Python 序列化與反序列化的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08

最新評論