zip、enumerate、列表推导式

# zip函数,将多个值变成一个多个元祖,好似打包一样
print(list(zip([1,2,3],[3,2,1],[0,0,0])))
#结果:[(1, 3, 0), (2, 2, 0), (3, 1, 0)]

#enmuit 枚举,start默认是0,也可以指定,这样就是从5开始,10个数字
print(list(enumerate(range(10),start=5)))
# 结果:[(5, 0), (6, 1), (7, 2), (8, 3), (9, 4), (10, 5), (11, 6), (12, 7), (13, 8), (14, 9)]

#列表推导式,推导式内部套推导式,第一个取出2-100的整数,第二个对2-100的整数进行做除法
#1、求100以内的素数(只能被1和自身整除的数,1除外)
ln = [n for n in range(2,101) if 0 not in [n%p for p in range(2, n)]]
print(ln)
# 结果:[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

#2、平铺:双层for循环,第一次取出[1,2,3]...,第二次取出具体的值
lnl=[[1,2,3],[4,5,6],[7,8,9]]
lnln=[n for elem in lnl for n in elem ]
print(lnln)
# 结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]

#3、矩阵转置
lnl=[[1,2,3],[4,5,6],[7,8,9]]
# 方法1列表推导式
lnlnl = [[n[i] for n in lnl] for i in range(3)]
print(lnlnl)# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
# 方法2,zip函数
zipln=list(map(list,zip(*lnl)))
print(zipln) #结果:[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

#4、 计算10以内各种除自身的组合
zh=[(x,y) for x in range(1,11) for y in range(1,11) if x!=y]
print(zh)
#[(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (1, 10), (2, 1), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (2, 10), (3, 1), (3, 2), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (3, 10), (4, 1), (4, 2), (4, 3), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (4, 10), (5, 1), (5, 2), (5, 3), (5, 4), (5, 6), (5, 7), (5, 8), (5, 9), (5, 10), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 7), (6, 8), (6, 9), (6, 10), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (7, 8), (7, 9), (7, 10), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (8, 9), (8, 10), (9, 1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8), (9, 10), (10, 1), (10, 2), (10, 3), (10, 4), (10, 5), (10, 6), (10, 7), (10, 8), (10, 9)]
# map函数的用法1:类型转换
print(list(map(str,[1,2,3]))) #['1', '2', '3'] int转str
# map函数的用法2:方法传参
def add(x):
    return x+5
print(list(map(add,range(3)))) #[5, 6, 7]
def add_(x,y):
    return x+y
print(list(map(add_,range(0,3),range(0,3)))) #[0, 2, 4]

# reduce函数,累加
from functools import reduce
print(reduce(add_,range(5)))#10

#filter函数,过滤
x=[1,0,2,-1]
def filter_x(x):
    return  x>0
print(list(filter(filter_x,x))) #[1, 2]

# 元祖推导式(惰性原则),一次
yz=(x for x in range(1,11))
print(list(yz)) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list(yz)) #[]
# 元祖的next方法,每次取一个
yz1=(x for x in range(1,11))
print(yz1.__next__()) #1
#yeild:普通函数使用return返回一个数据,生成器使用yield产生一系列数据
def counter(start=0):
    while True:
        yield start
        start+=1
b=counter()
print ('first:',b.__next__()) # first: 0
print ('second:',b.__next__()) # second: 1

# 字典推导式,跟列表推导式类似,只不过换成{}而已

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值