日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

day10-列表生成式

發(fā)布時(shí)間:2023/12/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 day10-列表生成式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

1、生成一個(gè)列表

a = [i for i in range(1,100) if i%2==1]
print(list(a))或print(a)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]

或一句話輸出
print([i for i in range(1,100) if i%2==0])
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]

2、生成[1x1, 2x2, 3x3, ..., 10x10]

方法一是循環(huán)
L = []
for x in range(1, 11):
L.append(x * x)
print(L)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

方法二用一行語句代替循環(huán)生成list
print([x * x for x in range(1, 11)])
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
寫列表生成式時(shí),把要生成的元素x * x放到前面,后面跟for循環(huán),就可以把list創(chuàng)建出來。

3、for循環(huán)后面還可以加上if判斷,可以篩選出僅偶數(shù)的平方
print([x * x for x in range(1, 11) if x % 2 == 0])
[4, 16, 36, 64, 100]

也可以用filter()和lambda實(shí)現(xiàn)上面的功能:
print(list(filter(lambda x:x%2==0,range(10))))
[0, 2, 4, 6, 8]

filter():filter(function,list),把list中的元素一個(gè)個(gè)丟到function中,Return True的元素組成一個(gè)new list。
lambda匿名函數(shù),lambda a:b,其中a表示參數(shù),b表示返回值。

總結(jié):
1、循環(huán)list的時(shí)候,最好用for i in list:,減少因?yàn)閐el()犯下不易察覺的失誤。
2、在python2 中直接打印map,filter函數(shù)會(huì)直接輸出結(jié)果。但在python3中做了些修改,輸出前需要使用list()進(jìn)行顯示轉(zhuǎn)換。

?

對(duì) numbers 的每個(gè)數(shù)求平方
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print([x * x for x in numbers])
[1, 4, 9, 16, 25, 36, 47, 84, 81, 100]

還可以使用兩層循環(huán),可以生成全排列:
print([m + n for m in 'ABC' for n in 'XYZ'])
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

4、列出當(dāng)前目錄下的所有文件和目錄名
import os # 導(dǎo)入os模塊,模塊的概念后面講到
print([d for d in os.listdir('.')]) # os.listdir可以列出文件和目錄
['.emacs.d', '.ssh', '.Trash', 'Adlm', 'Applications', 'Desktop', 'Documents', 'Downloads', 'Library', 'Movies', 'Music', 'Pictures', 'Public', 'VirtualBox VMs', 'Workspace', 'XCode']

5、使用兩個(gè)變量來生成list,類似于通過for循環(huán)迭代dict的items()取出key和value

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

6、把一個(gè)list中所有的字符串變成小寫
L = ['Hello', 'World', 'IBM', 'Apple']
print([s.lower() for s in L])
['hello', 'world', 'ibm', 'apple']

如果list中既包含字符串,又包含整數(shù),由于非字符串類型沒有l(wèi)ower()方法,所以列表生成式會(huì)報(bào)錯(cuò):
L = ['Hello', 'World', 18, 'Apple', None]
print([i.lower() for i in L])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <listcomp>
AttributeError: 'int' object has no attribute 'lower'

使用內(nèi)建的isinstance函數(shù)可以判斷一個(gè)變量是不是字符串:
>>> x = 'abc'
>>> y = 123
>>> isinstance(x, str)
True
>>> isinstance(y, str)
False

通過添加if語句保證列表生成式能正確地執(zhí)行:
[i.lower() for i in L if isinstance(i,str)]
['hello', 'world', 'apple']

或者用type()判斷也可以,推薦用isinstance()
print([i.lower() for i in L if type(i)==str])

7、設(shè)置range中的步長(zhǎng)
a = range(1,10)
print(list(a))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

b = range(1,10,2)
print(list(b))
[1, 3, 5, 7, 9]

?

轉(zhuǎn)載于:https://www.cnblogs.com/dxnui119/p/9829836.html

總結(jié)

以上是生活随笔為你收集整理的day10-列表生成式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。