洗禮靈魂,修煉python(15)--列表進階話題—>列表解析/列表生成器

来源:http://www.cnblogs.com/yangva/archive/2017/10/07/7635733.html
-Advertisement-
Play Games

是的,我是想到什麼知識點就說什麼,沒有固定的主題,我的標題都是在寫完博客再給的。本篇博文說說列表進階話題。其實列表應該是比較熟悉的了,而毫不誇張的說,在實際的開發中,列表也是使用的最多的,以後你會體會到我說的這句話的。 列表解析 1.什麼是列表解析: 根據已有列表,高效生成新列表的方式,還有另一個叫 ...


是的,我是想到什麼知識點就說什麼,沒有固定的主題,我的標題都是在寫完博客再給的。本篇博文說說列表進階話題。其實列表應該是比較熟悉的了,而毫不誇張的說,在實際的開發中,列表也是使用的最多的,以後你會體會到我說的這句話的。

列表解析

1.什麼是列表解析:

根據已有列表,高效生成新列表的方式,還有另一個叫法是叫列表推導式

2.作用:

列表解析是python迭代機制的一種應用,它常用於實現創建新的列表,因此要放置在列表中

3.格式:

[expr for iter in iterable]

4.實際運用:

例題:返回1到10的所有數的平方:

註意:我使用的的是python2,如果你是用的是python3,需要加括弧的,還有,列表解析是用的使用中括弧,不是小括弧

是不是很簡單的就生成了我們想要的結果?

這裡用到一個內置函數range(),前面提到沒有我也忘了(是的,我也有任性的時候/滑稽),在這裡詳細講解一下:

range([start,]  stop[,step=1]):中括弧表示這兩參數可選,Step=1表示第三個參數的值預設值是1

range這bif(內置函數)的作用是生成一個從start參數的值開始到stop參數的值結束的數字序列

例:

 

由這個例子得到一個知識點,註意:range函數,第二個參數不包括其中,預設從0開始(是不是有點像索引)

也可以和切片一樣添加步長來返回:

好,我想你已經對列表解析有個大概瞭解了,再看一個列子:

返回1到10的所有偶數:

註意:列表解析,整個過程中,每一小段代碼不用冒號或者逗號隔開,直接是空格隔開

 

再看幾個綜合練習題:

 

1).用列表解析生成100內的大於20的偶數(請用兩種寫法)

 

 

2).用列表解析生成100內的大於20的偶數的平方

 

 

3).用列表解析輸出結果:[1 love python,2 love python,3 love python,.... 10 love python]

 

 

 4).用列表解析的方法返回某一磁碟路徑下相同尾碼名文件組成的列表

這裡使用了os模塊和字元串的endswith方法,os模塊後面會解析

好,列表解析完了,其實很簡單對不對?

 

列表生成器

 1.什麼是列表生成器:

概念和列表解析差不多,根據已有列表,以生成器的方式生成一個列表。生成器是迭代器的一種實現

2.作用:

返回一個生成器對象,並不真正創建列表

3.格式:

(expr for iter in iterable)

4.實際運用:

例題:返回1到10的所有數的平方:

是的,我想你應該看出列表生成器和列表解析的不同了

註意:

1.列表生成器使用的是小括弧,列表解析是用的是中括弧哦

2.列表生成器不能直接輸出,換句話生成器對象不能直接輸出

3.如果要輸出,則必須使用生成器對象的next()方法一一返回

4.當生成器對象返回完則會報錯

 

 說到列表生成器,那不得不提到生成器關鍵詞—yield

yield:是為在函數內使用的生成器語法,一旦程式里有yield,則被定義為生成器

 例:

這裡使用了自定義函數的語法,姑且不管,後面會詳解。因為知識都是相連的,所以避免不了穿插後面的知識。

發現沒?使用yield關鍵詞就會把函數變為一個生成器對象

 

其實說道生成器和列表解析,就和range()函數與xrange()函數一樣

range()函數前面說了,不再解釋。xrange每次返回一個數值,和range不同

 例:

 

 

綜合實例:

有沒有發現,哎,這啥情況對吧?怎麼next方法不頂用了,老師返回1啊,其實不是,是因為:

列表生成器一次知返回一個值,由於不能多次調用生成器,一位內每調用一次,記憶體ID就會變化一次,所以,一般賦值給另一變數來進行一一返回

列表解析和列表生成器綜合使用

1.列表解析功能強大,但很占用資源,列表生成器只返回一個值,但占用小,所以酌情選擇

2.例:用生成器和解析結合實現1到10的平方數除以2的結果:

註意:在這裡外層和內層的i的引用,其實並不衝突的,但儘量少用,有些地方是有衝突的

3.生成器也可以轉換為列表:

4.例

好,列表進階話題完結,留下幾個課後練習自己練習

課後作業:

1.使用列表解析輸出結果:[(0,0),(0,2),(2,0),(2,2)]

2.使用列表生成器列印斐波那契數列

3.使用列表解析生成列表[1x2,3x4,5x6,7x8,…,99x100]

4.利用3層for迴圈的列表生成式,找出對稱的3位數,例如:121等從左到右從又到左還是原來的對稱數

5.編寫一個函數,它接受一個list,然後把list中的所有字元串變成大寫後返回,非字元串元素將被忽略

 


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

-Advertisement-
Play Games
更多相關文章
  • 大學畢業後筆者進入一家外企,做企業CRM系統開發,那時候開發效率最高的高級程式語言,毫無疑問是C#。恰逢公司也在擴張,招聘了不少.net程式員,筆者作為應屆生,也樂呵呵的加入到.net程式員行列中。 C#.net非常容易上手,之前在大學里,做過winform和webform開發,也曾經在老師那裡承接 ...
  • Too Rich Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1410 Accepted Submission(s): 362 Probl ...
  • SpringBoot引入JPA,application.ymlapplication.yml增加資料庫鏈接參數,啟動卡死,日誌沒有動,如下圖 折騰好久,後面發現用 Maven的package 過程中 可以看出資料庫名稱出錯,如下圖 這時候再啟動,發現控制台日誌也有了看出資料庫名稱出錯。 最後實驗下, ...
  • 最近需要做一個粗略的後臺管理的許可權,根據用戶的等級來載入相應的菜單,控制到子菜單。使用的是Easyui這個框架。 1.我使用的mysql資料庫。在這裡我就建立四張表,角色表(tb_users),菜單表(tb_menu),用戶許可權表(tb_role),許可權菜單表(tb_user_role).表結構如下 ...
  • 在 java平臺上,lombok 提供了簡單的註解的形式來幫助我們消除一些必須有但看起來很臃腫的代碼, 比如屬性的get/set,及對象的toString等方法,特別是相對於 POJO。簡單的說,就是簡化了Java代碼,消除Java冗長的代碼。lombok jar的下載地址:https://proj ...
  • 把泛型由Boolean改為String。 ...
  • RBAC --> 基於角色的許可權控制 tb_user tb_role tb_userrole tb_menu(增、刪、改、查) tb_rolemenu 1 說明 給出三個頁面:index.jsp、user.jsp、admin.jsp。 index.jsp:誰都可以訪問,沒有限制; user.jsp: ...
  • 題目鏈接 Problem Description You have got a cylindrical cup. Its bottom diameter is 2 units and its height is 2 units as well.The height of liquid level i ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...