1.map
def f(x):
return x * x
r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(hasattr(r,'__next__'))
print(list(r))
2.reduce
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
from functools import reduce
def fn(x, y):
return x * 10 + y
reduce(fn, [1, 3, 5, 7, 9])
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
def str2int(s):
def fn(x, y):
return x * 10 + y
def char2num(s):
return DIGITS[s]
return reduce(fn, map(char2num, s))
def str2int(s):
def char2num(s):
return DIGITS[s]
return reduce(lambda x, y: x * 10 + y, map(char2num, s))
str2int('123')
str2int(['1','2','3'])
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
def char2num(s):
return DIGITS[s]
def str2float(l):
a,b = l.split('.')
big = reduce(lambda x,y:x*10+y,map(char2num,a))
re_b = b[::-1]
small = reduce(lambda x,y:x/10+y,map(char2num,re_b))
return big+small/10
print('str2float(\'123.456\') =', str2float('123.456'))
if abs(str2float('123.456') - 123.456) < 0.00001:
print('成功!')
else:
print('失敗!')
3.filter
def is_odd(n):
return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
def is_equal(n):
return str(n) == str(n)[::-1]
list(filter(is_equal, range(1,500)))
4.sorted
sorted([36, 5, -12, 9, -21])
sorted([36, 5, -12, 9, -21], key=abs)
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_score(n):
return n[1]
sorted(L,key=by_score)