1、集和生成式,列表生成式,字典生成式
1)集合生成式
练习
print({i ** 2 for i in {1,2,3,3}})
print({i ** 2 for i in {1,2,3,9,12,9} if i % 3 == 0 })
结果
{1, 4, 9}
{81, 9, 144}
2)列表生成式
练习1:输出圆的半径
找出1-10之间的所有偶数,
# 并返回一个列表(包含以这个偶数为半径的圆的面积)
代码:
import math
a = math.pi
print(a)
print([math.pi * r * r for r in range(2, 11, 2)])
结果
3.141592653589793
[12.566370614359172, 50.26548245743669, 113.09733552923255, 201.06192982974676, 314.1592653589793]
练习2:判断质数
找出1~100之间所有的质数
代码:
def fun(num):
for i in range(2, num):
if num % i == 0:
return False
else:
return True
print([i for i in range(2, 101) if fun(i)])
结果:
[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]
练习3:
- 题目描述:
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整
数,并输出结果。输
入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别
为(5,5),(3,7))
# [2,3,5,7]
- 输入描述:
输入包括一个整数n,(3 ≤ n < 1000)
- 输出描述:
输出对数
- 示例1 :
```
输入:
10
输出:
2
代码:
num = int(input())
def isPrime(num):
for i in range(2, num):
if num % i == 0:
return False
else:
return True
primeli = [i for i in range(2, num) if isPrime(i)]
print(primeli)
"""
1.先从列表中拿出两个数
2.判断两个数之和是否等于num
"""
# [2,3,5,7] # 2 10 -2 =8
primecount = 0
for item in primeli:
if (num - item) in primeli and item <= num - item:
primecount += 1
print(primecount)
结果:
20
[2, 3, 5, 7, 11, 13, 17, 19]
2
3)字典生成式
练习1:字典的key转换为大写
代码:
d = dict(a=1,b=2)
print(d)
new_d = {}
for i in d:
new_d[i.upper()] = d[i]
# print('key转化为大写的字典:',new_d)
print({k.upper():v for k,v in d.items()})
结果:
{'a': 1, 'b': 2}
{'A': 1, 'B': 2}
练习2:大小写的和
d = dict(a=2,b=1,c=2,B=9,A=10)
#输出{'a':12,'b':10,'c':2}
代码:
d = dict(a=2,b=1,c=2,B=9,A=10)
new_d = {}
for k,v in d.items():
low_k = k.lower()
if low_k not in new_d:
new_d[low_k] = v
else:
new_d[low_k] += v
print(new_d)
print({k.lower(): d.get(k.lower(),0) + d.get(k.upper(),0) for k in d})
结果:
{'a': 12, 'b': 10, 'c': 2}
{'a': 12, 'b': 10, 'c': 2}
2、高阶函数
1)、高阶函数的概念
高阶函数:
实参是一个函数名
函数的返回值也是一个函数
abs 和 abs()的区别:
abs为函数整体
abs()为返回值
#函数本身也可以赋值给变量,变量也可以指向函数
# f = abs
# print(f(-10))
#传递的参数包括函数名
def fun(x,y,f):
return f(x),f(y)
print(fun(-10,34,abs))
(10, 34)
2)、内置的高阶函数
一、map函数
map()函数接收两个参数,一个是函数,一个是序列
map将传入的函数依次作用到序列的每个元素,并且
把结果作为新的序列返回
练习1:对于序列[-1,3,-5,-4]的每个元素求绝对值
print(list(map(abs,[-1,3,-5,-4])))
[1, 3, 5, 4]
练习2:对于序列的每个元素求阶乘(10个,2~7之间的随机)
代码:
import random
def factoria(x):
res = 1
for i in range(1,x+1):
res *= i
return res
li = [random.randint(2,7) for i in range(10)]
print(list(map(factoria,li)))
结果:
[2, 720, 5040, 6, 120, 24, 5040, 120, 120, 5040]
二、reduce函数
reduce:把一个函数作用在一个序列上,这个函数必须接收两个
参数,reduce把结果继续和序列的下一个元素累计计算
reduce(f,[x1,x2,x3,x4,x5]) = f(f(f(f(x1,x2),x3),x4),x5)
使用时,需要导入。from functools import reduce
累乘
累加
from functools import reduce
def multi(x,y):
return x * y
print(reduce(multi,range(1,4)))
def add(x,y):
return x + y
print(reduce(add,[1,2,3,4,5]))
结果:
6
15
三、filter过滤函数
filter过滤函数
和map类似,也接收一个函数和一个序列
但是和map不同的是,filter把传入的函数依次作用于每个元素
然后根据返回值是True还是False决定保留还是丢弃该元素
练习:判断质数
def fun(num):
for i in range(2, num):
if num % i == 0:
return False
else:
return True
print(list(filter(fun,range(2,100))))
结果:
[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]