Python——列表推导式和列表生成式

文章介绍了Python编程中列表推导式和生成式的使用,包括从序列创建列表、判断整数是否为偶数、执行元素操作、嵌套循环、行列转换、过滤偶数、计算对称数、列表逆序等操作,同时提到了生成式在节省空间和提高效率上的优势。
摘要由CSDN通过智能技术生成

列表推导式

从序列创建列表的简单途径

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是步长
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值