自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

盤(pán)點(diǎn)Python列表生成式的三種方法

開(kāi)發(fā) 后端
列表生成式即List Comprehensions,是Python內(nèi)置的非常簡(jiǎn)單卻強(qiáng)大的可以用來(lái)創(chuàng)建list的生成式。

 一、前言

列表生成式即List Comprehensions,是Python內(nèi)置的非常簡(jiǎn)單卻強(qiáng)大的可以用來(lái)創(chuàng)建list的生成式。

[[381046]]

二、案例分析

三種方法

要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))。

 

  1. print(list(range(1, 11))) 

 

如果要生成[1x1, 2x2, 3x3, …, 10x10]怎么做?

1. 方法一是循環(huán):

 

  1. L = [] 
  2. for x in range(1, 11): 
  3.     L.append(x * x) 
  4. print(L) 

但是循環(huán)太繁瑣,而列表生成式則可以用一行語(yǔ)句代替循環(huán)生成上面的list:

 

  1. print([x * x for x in range(1, 11)]) 

寫(xiě)列表生成式時(shí),把要生成的元素x * x放到前面,后面跟for循環(huán),就可以把list創(chuàng)建出來(lái),十分有用,多寫(xiě)幾次,很快就可以熟悉這種語(yǔ)法。

for循環(huán)后面還可以加上if判斷,這樣就可以篩選出僅偶數(shù)的平方:

 

  1. for x in range(1, 11): 
  2.     L.append(x * x) 
  3.  
  4. print([x * x for x in range(1, 11) if x % 2 == 0]) 

 

2. 使用兩層循環(huán),可以生成全排列

 

  1. L = [] 
  2. for x in range(1, 11): 
  3.     L.append(x * x) 
  4.  
  5. print( [m + n for m in 'ABC' for n in 'XYZ']) 

 

三層和三層以上的循環(huán)就很少用到了。

3. 運(yùn)用列表生成式,可以寫(xiě)出非常簡(jiǎn)潔的代碼。

例如,列出當(dāng)前目錄下的所有文件和目錄名,可以通過(guò)一行代碼實(shí)現(xiàn):

 

  1. import os  # 導(dǎo)入os模塊,模塊的概念后面講到 
  2.  
  3. print([d for d in os.listdir('.')])  # os.listdir可以列出文件和目錄 

 

for循環(huán)其實(shí)可以同時(shí)使用兩個(gè)甚至多個(gè)變量,s比如dict的items()可以同時(shí)迭代key和value:

 

  1. d = {'x''A''y''B''z''C'
  2. for k, v in d.items(): 
  3.     print(k, '=', v) 

 

因此,列表生成式也可以使用兩個(gè)變量來(lái)生成list:

 

  1. d = {'x''A''y''B''z''C' } 
  2. print([k + '=' + v for k, v in d.items()] 

 

最后把一個(gè)list中所有的字符串變成小寫(xiě):

 

  1. L = ['Hello''World''IBM''Apple'
  2. print([s.lower() for s in L]) 

 

如果list中既包含字符串,又包含整數(shù),由于非字符串類(lèi)型沒(méi)有l(wèi)ower()方法,所以列表生成式會(huì)報(bào)錯(cuò):

 

  1. L = ['Hello''World', 18, 'Apple', None] 
  2. print([s.lower() for s in L]) 

 

使用內(nèi)建的isinstance函數(shù)可以判斷一個(gè)變量是不是字符串:

 

  1. x = 'abc' 
  2. y = 123 
  3. print(isinstance(x, str)) 
  4.  
  5. print(isinstance(y, str)) 

 

三、練習(xí)和思考

請(qǐng)修改列表生成式,通過(guò)添加if語(yǔ)句保證列表生成式能正確地執(zhí)行。

 

  1. # -*- coding: utf-8 -*- 
  2. L1 = ['Hello''World', 18, 'Apple', None] 
  3. L2=??? 
  4.  
  5. # 期待輸出: ['hello''world''apple'
  6. print(L2) 

練習(xí)參考代碼 :

 

  1. L2 =[s.lower() for s in L1 if isinstance(s, str) ] 

運(yùn)行結(jié)果:

 

注:

運(yùn)用列表生成式,可以快速生成list,可以通過(guò)一個(gè)list推導(dǎo)出另一個(gè)list,而代碼卻十分簡(jiǎn)潔。

四、總結(jié)

本文基于Python基礎(chǔ),介紹了列表生成式,以案例為主,三種方法進(jìn)行講解。

分析不同方法的實(shí)現(xiàn)一樣的效果。實(shí)際案例中需要注意的點(diǎn),遇到的難點(diǎn),提供有效的解決方法。最后通過(guò)練習(xí)和思考,對(duì)列表生成式加深理解。

歡迎大家積極嘗試,有時(shí)候看到別人實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,但是到自己動(dòng)手實(shí)現(xiàn)的時(shí)候,總會(huì)有各種各樣的問(wèn)題,切勿眼高手低,勤動(dòng)手,才可以理解的更加深刻。

代碼很簡(jiǎn)單,希望對(duì)你學(xué)習(xí)有幫助。

責(zé)任編輯:華軒 來(lái)源: Go語(yǔ)言進(jìn)階學(xué)習(xí)
相關(guān)推薦

2021-02-03 18:05:30

Python方法列表

2022-01-20 09:58:44

Python元素列表

2024-11-15 07:00:00

Python發(fā)送郵件

2022-07-13 16:06:16

Python參數(shù)代碼

2009-07-08 12:56:32

編寫(xiě)Servlet

2010-09-02 10:02:17

PHP

2022-04-28 07:26:17

PythonDocker容器

2009-12-11 18:49:39

預(yù)算編制博科資訊

2011-04-18 15:32:45

游戲測(cè)試測(cè)試方法軟件測(cè)試

2010-09-14 15:10:49

CSS注釋

2023-08-14 17:58:13

RequestHTTP請(qǐng)求

2011-06-10 10:43:12

Ubuntu應(yīng)用安裝

2009-06-23 10:45:18

Hibernate支持

2025-01-03 08:48:20

列表推導(dǎo)式Python編程

2021-07-13 12:31:27

IT組織改進(jìn)首席技術(shù)官

2021-12-20 07:11:26

Java List排序 Java 基礎(chǔ)

2023-09-25 15:08:43

Python方離群值

2010-10-20 13:52:07

SQL Server數(shù)

2009-07-23 15:17:54

JDBC連接Acces

2016-09-09 13:07:56

CentOSJDKLinux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)