六剑客之一: 推导列表
>>> [i for i in range(1,11)]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> [i for i in range(31) if i % 10 <= 5]
[0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 25, 30]
>>> [i for i in range(31) if i % 10 <= 5 if i % 10 == 0]
[0, 10, 20, 30]
>>> [i for i in range(31) if i % 10 <= 5 and i % 10 == 0]
[0, 10, 20, 30]
六剑客之二: 切片
>>> s = [i for i in range(1, 11)]
>>> s
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> s[2:5]
[3, 4, 5]
>>> s[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> s[::2]
[1, 3, 5, 7, 9]
>>> s[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> s[::-2]
[10, 8, 6, 4, 2]
六剑客之三: map
- map(函数对象,可迭代对象)
>>> list(map(str, [1,2,3,4]))
['1', '2', '3', '4']
处理过程:
[1,2,3,4]中每一个元素会被遍历取出,然后发给str函数去求一个处理结果放到结果的List中
第一次:1 —》str(1)—>[“1”]
第二次:2 —》str(2)—>[“1”,“2”]
第三次:3 —》str(3)—>[“1”,“2”,“3”]
第四次:4 —》str(4)—>[“1”,“2”,“3”,“4”]
六剑客之四: lambda
- lambda [arg1[, arg2, … argN]]: expression
- lambda 表达式,又称匿名函数,常用来表示内部仅包含 1 行表达式的函数。
- 如果一个函数的函数体仅有 1 行表达式,则该函数就可以用 lambda 表达式来代替。
>>> func = lambda x: x * 10
>>> func(1)
10
>>> func(2)
20
>>> func = lambda x,y:[x**2,y**2]
>>> func(2,3)
[4, 9]
>>> func(5,6)
[25, 36]
lambda 与map结合使用
>>> list(map(lambda x:x*10, [1,2,3,4]))
[10, 20, 30, 40]
六剑客之五: filter
- filter(函数对象,可迭代对象)
- 原理:把可迭代对象中的每一个对象传到函数对象中,函数使用这个参数返回值True,就会把这个值保留下来,否则就丢弃掉
- 函数可以用lambda,也可以用自定义函数
>>> list(filter(lambda x: x>=10, [1,2,10,15,3,20]))
[10, 15, 20]
>>> def than(num):
... if num >= 10:
... return True
... else:
... return False
...
>>> list(filter(than, [1,2,10,15,3,20]))
[10, 15, 20]
六剑客之六: reduce
- 需要导包才能使用(from functools import reduce)
- reduce(function, iterable[, initializer])
function – 函数,有两个参数
iterable – 可迭代对象
initializer – 可选,初始参数
>>> from functools import reduce
>>> sum = reduce(lambda x,y: x+y, [1,2,3,4])
>>> sum
10
>>> def add(x,y):
... return x + y
...
>>> sum2 = reduce(add,[1,2,3,4])
>>> sum2
10
计算过程:
- 第一次计算:x=1,y=2,计算的结果3
- 第二次计算:x=3,y=3, 计算的结果6
- 第三次计算:x=6,y=4, 计算的结果10
如果未传入initializer参数:
第一次计算的是iterable第一个元素与第二个元素
如果传入initializer参数:
则第一次计算的就是initializer与iterable第一个元素
>>> from functools import reduce
>>> sum3 = reduce(lambda x,y: x+y, [1,2,3,4], 100)
>>> sum3
110
计算过程:
- 第一次计算:x=100,y=1,计算的结果101
- 第二次计算:x=101,y=2, 计算的结果103
- 第三次计算:x=103,y=3, 计算的结果106
- 第四次计算:x=106,y=4, 计算的结果110