Python推导式

  • 内容较为简单,熟练掌握示例即可。

列表推导式

一般形式

# 示例一
li = [i for i in range(10)] 
print(li)  # [0,1,2,3,4,5,6,7,8,9]

# 示例二
li = [i+1 if i % 2 == 0 else i for i in range(10)]
print(li)  # [1, 1, 3, 3, 5, 5, 7, 7, 9, 9]

# 示例三
lis = ["a","b","c","d","e","f","g"]
li = [lis[i] for i in range(len(lis)) if i % 2 == 0]
print(li)  # ['a', 'c', 'e', 'g']

# 示例四(新浪微博面试题)
lis = [lambda x:x*i for i in range(10)]
"""
1.请问lis是什么?  9个函数
2.请问lis[0](2)的结果是什么?  18
"""

# 示例五(另一面试题)
def num():
    return[lambda x:x*i for i in range(4)]

print([ m(2) for m in num() ])  # [6,6,6,6]

# 示例六(筛选,和示例二有区别)
lis = [i for i in range(10) if i%2 == 0]
print(lis)  # [0, 2, 4, 6, 8]

嵌套

# 示例一
data_list = [[i, j] for i in range(1, 5) if i % 2 == 0 for j in range(1, 5)]
print(data_list)  # [[2, 1], [2, 2], [2, 3], [2, 4], [4, 1], [4, 2], [4, 3], [4, 4]]

# 示例二
data_list = ["\t".join([f"{i}*{j}={i * j}" for i in range(1, j + 1)]) for j in range(1,10)]
print("\n".join(data_list))
"""
1*1=1
1*2=2	2*2=4
1*3=3	2*3=6	3*3=9
1*4=4	2*4=8	3*4=12	4*4=16
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81
"""

# 示例三(一行打印九九乘法表)
print("\n".join(["\t".join([f"{i}*{j}={i * j}" for i in range(1, j + 1)]) for j in range(1,10)]))
"""
1*1=1
1*2=2	2*2=4
1*3=3	2*3=6	3*3=9
1*4=4	2*4=8	3*4=12	4*4=16
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81
"""

集合推导式

  • 集合推导式和列表推导式的格式基本相同,故不放示例演示

  • 集合使用{ },而列表使用[ ];集合推导式生成的集合会自动去重,而列表推导式生成的列表不会。

字典推导式

# 示例一
dic = {"k"+str(i):i for i in range(5)}
print(dic)  # {'k0': 0, 'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}

# 示例二
keys = ["name","pwd","age"]
values = ["alex","123",18]
dic = {k:v for k,v in zip(keys,values)}
print(dic)  # {'name': 'alex', 'pwd': '123', 'age': 18}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值