列表生成可以自动生成一个列表,不用人工繁琐的去定义。
顺便说下range函数,range函数格式为range(start,stop,step),参数为起始、终止但不包含、间隔。range(1,10,1)得到的是1-9这9个数字。
如果列表生成连续的数字可以使用range函数来完成
L=list(range(0,10,1))
print(L)
返回列表1-9
如果生成1*1,2*2...的列表则比较麻烦
L=[]
for i in range(1,11,1):
L.append(i*i)
print(L)
返回1*1,2*2...10*10的列表
如果使用列表生成式则是
L=[x*x for x in range(1,11)]
print(L)
可以分别来理解,L=[x*x],后面跟着x的取值范围。
同样的在列表生成式中也可以加入条件
L=[x*x for x in range(1,11) if x%2==0]
print(L)
1-10中偶数的平方。
字符串也被认为是一个列表,因此也可以对列表进行两层循环搭配
L=[x+y for x in 'abcde' for y in 'fghij']
print(L)
返回['af', 'ag', 'ah', 'ai', 'aj', 'bf', 'bg', 'bh', 'bi', 'bj', 'cf', 'cg', 'ch', '
ci', 'cj', 'df', 'dg', 'dh', 'di', 'dj', 'ef', 'eg', 'eh', 'ei', 'ej']
列表生成式的书写格式:[x*x for x in range(1 , 11)]
第一:把要生成的元素 x*x 放到前面
第二:后面跟上for循环
这样就可以把list创建出来。
for循环后面还可以加上if判断,这样可以筛选出偶数的平方:
>>> [x*x for x in range(1 , 11) if x%2 == 0]
[4, 16, 36, 64, 100]
>>>
当然,可以使用两层循环,生成全排列:
>>> print [m + n for m in 'ABCD' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ', 'DX', 'DY', 'DZ']
>>>
>>> 如何使用两个变量来生成list:
d = {'Java':"99" , 'C':"99" , 'C++':"99" }
L = [k+'='+v for k , v in d.iteritems()]
print L
最后来做一个练习:
L = ['Java' , 'C' , 'Swift' , 'Python' , 123] , 现在有 list 中包含字符串,和整数,把list中得大写字符转为小写,推到出另外一个list":
1、使用内建的isinstance函数可以判断一个变量是不是字符串
2、s.lower() 可以将一个大写字母转为小写。
3、增加if语句保证列表生成式正确执行。
代码如下:
L = ['Java' , 'C' , 'Swift' , 'Python' , 123]
print [s.lower() if isinstance(s , str) else s for s in L ]