11_Python的列表推導式_Python編程之路

来源:https://www.cnblogs.com/susmote/archive/2018/04/20/8894052.html
-Advertisement-
Play Games

上一節我們結束了有關python的方法相關內容 這一節我們先來學習python的列表推導式 之前跟大家說過range方法的使用,在這裡我就不做過多的解釋了,如忘記了,請翻閱之前的介紹 列表推導式,是Python內置的一種極其強大的生成list的表達式 如果要生成一個list [1 , 2 , 3 , ...


上一節我們結束了有關python的方法相關內容

 

這一節我們先來學習python的列表推導式

之前跟大家說過range方法的使用,在這裡我就不做過多的解釋了,如忘記了,請翻閱之前的介紹

列表推導式,是Python內置的一種極其強大的生成list的表達式


如果要生成一個list [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] 可以用 range(1 , 9):

In [1]: list(range(1, 9))
Out[1]: [1, 2, 3, 4, 5, 6, 7, 8]

  

非常簡單操作,相信大家一定都會

但我們要講的並不是這個

 

所謂的列表推導式,就是指的輕量級的迴圈創建列表:

比如像下麵的兩個式子

In [2]: a = [i for  i in range(1,10)]

In [3]: a
Out[3]: [1, 2, 3, 4, 5, 6, 7, 8, 9]

In [4]: b = [10 for i in range(1, 10)]

In [5]: b
Out[5]: [10, 10, 10, 10, 10, 10, 10, 10, 10]

  批量生成了兩個列表,第一個是一個有順序的從1到9的列表,第二個是生成了9個相同的數字10

簡單講一下這個列表推導式是怎麼定義的

首先忽略推導式中的第一個字元,也就是 i 和 10 ,看後面的一段語句,很顯然,是一個迴圈語句,之前講過迴圈語句的,這裡不詳細解釋了

然後再來觀察最前面的字元,也就是列表中的元素,迴圈過的每一個都被作為列表的元素,如果你前面的字元是一個常數的話,那麼就只需要考慮迴圈的次數,而不需要考慮迴圈的值

 

接下來,我們繼續來加強這個列表推導式的應用

通過判斷語句篩選列表元素

比如下麵這段代碼

In [6]: list_if = [i for i in range(1, 10) if i%2 == 0]

In [7]: list_if
Out[7]: [2, 4, 6, 8]

  

我們在裡面加了判斷條件,以獲取給定迴圈範圍內的所有的偶數

也就是說你可以在迴圈語句後面在加判斷語句

 

 

這個還不能算是入門,接下來我們繼續來加強列表推導式的應用

多個for迴圈

2個for迴圈

使用兩個for迴圈語句,以獲取二維列表

代碼如下所示

In [8]: muti_for_list = [(i ,j) for i in range(1, 5) for j in range (6, 10)]

In [9]: muti_for_list
Out[9]:
[(1, 6),
 (1, 7),
 (1, 8),
 (1, 9),
 (2, 6),
 (2, 7),
 (2, 8),
 (2, 9),
 (3, 6),
 (3, 7),
 (3, 8),
 (3, 9),
 (4, 6),
 (4, 7),
 (4, 8),
 (4, 9)]

  

這個列表推導式在一些演算法領域會有涉及,我們通過連續寫兩個for迴圈語句,然後在開始以一個(i, j)作為獲取的對象,在這裡要註意以下,他是按照順序執行的

 

三個for迴圈

獲取三維數組

In [10]: muti_for_list = [(x, y, z) for x in range(2) for y in range (2) for z in range(2)]

In [11]: muti_for_list
Out[11]:
[(0, 0, 0),
 (0, 0, 1),
 (0, 1, 0),
 (0, 1, 1),
 (1, 0, 0),
 (1, 0, 1),
 (1, 1, 0),
 (1, 1, 1)]

  

原理基本和二維數組的生成差不多,所以就不做過多解釋了

 

 

在多維數組中使用判斷語句

雖然我們在前面已經講了多維數組的創建,但為了加強這個的複雜度,我們繼續加一些條件

獲取三維數組中每行組中元素都一樣的數組 類似於下麵這樣的

[(1, 1, 1),
 (2, 2, 2),
 (3, 3, 3)]

  

下麵我們通過代碼來實現這個功能

In [12]: common_list = [(x, y, z) for x in range(10) for y in range (10) for z in range(10) if x == y and y == z]

In [13]: common_list
Out[13]:
[(0, 0, 0),
 (1, 1, 1),
 (2, 2, 2),
 (3, 3, 3),
 (4, 4, 4),
 (5, 5, 5),
 (6, 6, 6),
 (7, 7, 7),
 (8, 8, 8),
 (9, 9, 9)]

  

這個並不難實現,無非就是加個判斷條件

 

列表推導式,就講到這裡,他還有很多種其他的用法,希望大家,自己去挖掘,去探索

 

特克斯博客官網 www.susmote.com

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...