day10-列表生成式
列表生成式即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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 万恶之源 - Python基础数据类型
- 下一篇: 第 五 课 golang语言变量