python-列表生成器,,列表生成式:使用py


列表生成式:使用python内置的非常简却强大的List Comprehensions来创建list的生成式

一些例子:

#生成list原始方法
>>> L=list(range(100))>>> print (L)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]>>> L=[]>>> for x in range(1,100):L.append(x*x)>>> print(L)[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025, 2116, 2209, 2304, 2401, 2500, 2601, 2704, 2809, 2916, 3025, 3136, 3249, 3364, 3481, 3600, 3721, 3844, 3969, 4096, 4225, 4356, 4489, 4624, 4761, 4900, 5041, 5184, 5329, 5476, 5625, 5776, 5929, 6084, 6241, 6400, 6561, 6724, 6889, 7056, 7225, 7396, 7569, 7744, 7921, 8100, 8281, 8464, 8649, 8836, 9025, 9216, 9409, 9604, 9801]
#生成式生成comprehensions,但有语法限制,要加[],否则报语法错误
>>> x * x for x in range(1,11):SyntaxError: invalid syntax
#x*x是生成条件,就是取平方根>>> [x * x for x in range(1,11)][1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

#生成条件求平方根,但是list可以加if判断读出偶数的平方根>>> [x*x for x in range(1,11) if x %2 ==0][4, 16, 36, 64, 100]

#2个for不同参数取值,一一匹配,这种试不常用>>> [m+n for m in ‘ABC‘ for n in ‘dzg‘][‘Ad‘, ‘Az‘, ‘Ag‘, ‘Bd‘, ‘Bz‘, ‘Bg‘, ‘Cd‘, ‘Cz‘, ‘Cg‘]

#求出系统中目录带.的所有目录集合>>> import os>>> [d for d in os.listdir(‘.‘)][‘DLLs‘, ‘Doc‘, ‘include‘, ‘Lib‘, ‘libs‘, ‘LICENSE.txt‘, ‘NEWS.txt‘, ‘python.exe‘, ‘python3.dll‘, ‘python36.dll‘, ‘pythonw.exe‘, ‘Scripts‘, ‘tcl‘, ‘Tools‘, ‘vcruntime140.dll‘]

#当然也可以生成dict,这是原始dict>>> d={‘x‘:‘A‘,‘y‘:‘B‘,‘z‘:‘C‘}>>> for k,v in d.items():print(k,‘=‘,v)x = Ay = Bz = C

#利用生成器来打印循环出key,value>>> [k+‘=‘+v for k,v in d.items()][‘x=A‘, ‘y=B‘, ‘z=C‘]

#在列表生成器中加入对字符串的处理条件>>> L=[‘Hello‘,‘World‘,‘IBM‘,‘Apple‘]>>> [s.lower() for s in L][‘hello‘, ‘world‘, ‘ibm‘, ‘apple‘]>>> [s[0:1].upper() for s in L][‘H‘, ‘W‘, ‘I‘, ‘A‘]>>> [s[0:].upper() for s in L] #从0位开始所有都大写[‘HELLO‘, ‘WORLD‘, ‘IBM‘, ‘APPLE‘]>>> [s.capitalize() for s in L] #第一个字母大写其它小写[‘Hello‘, ‘World‘, ‘Ibm‘, ‘Apple‘]

 

这种是需要的时候,如果不记得可百度查询。没有好办法。用的多了,也就记得熟悉了。但要知道它有这个功能

最后来个题:

#L=[‘HEllo‘,‘world‘,18,‘apple‘,None]
#期待输出: [‘hello‘, ‘world‘, ‘apple‘]

>>> L=[‘HEllo‘,‘world‘,18,‘apple‘,None]>>> L1=[]>>> [i for i in L if isinstance(i,str)][‘HEllo‘, ‘world‘, ‘apple‘]>>> for i in L:if isinstance(i,str):L1.append(i)>>> [x.lower() for x in L1][‘hello‘, ‘world‘, ‘apple‘]

  

python-列表生成器

评论关闭