列表推导式
从序列创建列表的简单途径
lst=[i for i in range(3)]
输入一个整数列表,判断每个整数是否为偶数
lst=[2,5,7,8,14]
print(i%2==0 for i in lst) #=>[True,False,False,True,True]
新生成列表的每个元素可以是任意表达式或对象
vec1=[2,4,6]
print([x+2] for x in vec1) #=>[4,6,8]
print([[x,x*2] for x in vec1]) #=>[[2,4],[4,6],[6,8]]
为每个元素执行相同的操作,例如调用strip函数批量去除前导和后导空格
lst=[' happy','day ',' strong ']
print([x.strip() for x in lst]) #=>['happy','day','strong']
用嵌套循环构造列表推导式
vec1=[2,4,6]
vec2=[4,3,-5]
print([x*y for x in vec1 for y in vec2]) #=>[8, 6, -10, 16, 12, -20, 24, 18, -30]
print([vec1[i]*vec2[i] for i in range(len(vec1))]) #=>[8, 12, -30]
print([a*b for a,b in zip(vec1,vec2)]) #=>[8, 12, -30]
用列表推导式实现行列转换
lst=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
print([[row[i] for row in lst]for i in range(4)]) #=>[[1,5,9],[2,6,10],[3,7,11],[4,8,12]]
输入一个整数列表,把其中的偶数形成一个新的列表(列表推导式的循环后面可以加判断条件作为过滤器)
lst=[2,5,7,8,14]
print([i for i in lst if i%2==0]) #=>[2,8,14]
a=filter(lambda x:x%2==0,lst)
print(list(a)) #=>[2,8,14]
求列表中有多少个对称数
lst=[1221,2243,2332,1435,1236,5623]
sum([num==num[::-1] for num in map(str,lst)])
len([num for num in map(str,lst) if num==num[::-1]])
实现列表的逆序
#前两种都适用于字符串翻转,但对于第三种方法字符串没有reverse方法
lst=[5,7,6,9,12]
print(lst[::-1])
print(list(reversed(lst)))
lst.reverse() #列表被翻转,原有数据被改变
print(lst)
列表生成式
将列表推导式的方括号改成小括号
推导式一次性返回所有元素,生成式每次只返回一个元素
生成式占用空间较小,推导式效率高
当接受迭代器只有一个参数时,小括号可以省略
输入一个整数列表,输出其中偶数的个数
lst=[4,6,9,0,-2]
print(sum(i%2==0 for i in lst))
素数判断(若n为大于3的奇数,如果在3和n的平方根之间的所有奇数都不能整除n,则n为素数)
import math
def myprime(n):
if n==2:
return True
if n<2:
return False
return all(n%i for i in range(3,int(math.sqrt(n))+1,2))
#3是start,int(math.sqrt(n)+1)是奇数,2是步长