日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
盤點(diǎn)Python列表生成式的三種方法

一、前言

創(chuàng)新互聯(lián)專業(yè)提供成都移動(dòng)機(jī)房托管服務(wù),為用戶提供五星數(shù)據(jù)中心、電信、雙線接入解決方案,用戶可自行在線購買成都移動(dòng)機(jī)房托管服務(wù),并享受7*24小時(shí)金牌售后服務(wù)。

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

二、案例分析

三種方法

要生成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)太繁瑣,而列表生成式則可以用一行語句代替循環(huán)生成上面的list:

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

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

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

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

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

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

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

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

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

 
 
 
 
  1. import os  # 導(dǎo)入os模塊,模塊的概念后面講到
  2. 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è)變量來生成list:

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

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

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

如果list中既包含字符串,又包含整數(shù),由于非字符串類型沒有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. print(isinstance(y, str))

三、練習(xí)和思考

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

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

練習(xí)參考代碼 :

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

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

注:

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

四、總結(jié)

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

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

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

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

本文轉(zhuǎn)載自微信公眾號(hào)「Go語言進(jìn)階學(xué)習(xí)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Go語言進(jìn)階學(xué)習(xí)公眾號(hào)。


名稱欄目:盤點(diǎn)Python列表生成式的三種方法
分享地址:http://m.5511xx.com/article/dpcodih.html