def fa(x):
return x*x
list(map(fa,[1,2,3,4,5]))
#将fa这个函数,作用于list中的每一个【元素】
#map返回的是【生成器】,要直接“看到”值要用list强制输出
from functools import reduce#使用reduce一定要有这一句
def fn(x,y):
return x*10+y
def char2num(s):
digits = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
return digits[s]
reduce(fn,map(char2num,'13579'))
#reduce返回的是值
先用map,把‘13579’中每一个字符变成数字,并返回一个生成器
再用reduce,把fn函数作用于生成器中的每一个元素,but!reduce下的fn始终接收两个变量
计算过程:1x10+3=13,13x10+5=135,135x10+7=1357,1357x10+9=13579
把每一次计算的结果当做一个变量,传入下一次计算
filter函数将函数作用于list中的每一个元素,并对返回的对象做真值判断【注:不是返回值只能是True/False,所有对象均可做真值判断】,再决定是否保留该元素(True留,False删)
def not_empty(s):
return s and s.strip()
print(list(filter(not_empty,['A','','B',None,'C',' '])))
#filter返回的也是生成器,要用list+print强行“列出”
#筛选质数
def odd():
n = 1
while True:#无限循环
n = n+2#生成从3开始的无限奇数列
yield n#生成器,惰性,不占内存
def notdivisible(n):
return lambda x:x % n > 0
def primes():
yield 2
it = odd()#初始序列
while True:
n = next(it)#it指向一个生成器,要用next()语句来得到下一个值,即新序列的第一个值
yield n#无限质数生成器
it = filter(notdivisible(n),it)#删除it生成器中n的倍数(可整除n)
i = print('请输入想得到的质数范围:')
for n in primes():
if n <= i:
print(n)
else:
break
#practice 求回数-正数反数都一样的数
def huishu(n):
if n < 10:
return True
else:
s = str(n)
for i in range(len(s)//2):
if s[i] == s[len(s)-1-i]:
return True
else:
return False
#一个更更更简单的方法......
def huishu(n):
return str(n) == str(n)[::-1]
print(list(filter(huishu,range(1,200))))
sorted([36, 5, -12, 9, -21],key=abs)#排序时用绝对值排,最后输出顺序时按对应的原数列输出
sorted(['bob','about','Zoo','Credit'],key = str.lower)
#key函数作用于前面每一个元素,并根据key的值进行排序,默认从小到大
sorted(['bob','about','Zoo','Credit'],key = str.lower,reverse = True)
#reverse = True配合sorted函数使用,表示从大到小排序
# [ ].reverse() 仅翻转序列,不按大小排序
#practice
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_name(s):
return s[0]
def by_grade(s):
return s[1]
sorted(L,key = by_name)
sorted(L,key = by_grade, reverse = True)#成绩从高到低排
#思路:key要作用于L中每一个元素,L中元素是什么?是tuple。怎么取其中的值?t[i]