1. 生成器
在列表解析时,内存会直接占用,但是生成器生成后,只有在调用迭代器时,需要多少数据,才占用多少内存。
# 简单的生成器
(i for i in range(5))
# 函数返回值通过yield修饰
def f():
for i in range(10):
yield i
2. map()函数
map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。接收的参数与lambda传入的参数有关
x = map(lambda num: num + num, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(x))
y = map(lambda x, y, z: [x, y, z], [1, 2, 3], [4, 5, 6], [7, 8, 9])
print(y)# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
3. zip()函数
zip函数的原型为:zip([iterable, …])
参数iterable为可迭代的对象,并且可以有多个参数。该函数返回一个以元组为元素的列表,其中第 i 个元组包含每个参数序列的第 i 个元素。返回的列表长度被截断为最短的参数序列的长度。只有一个序列参数时,它返回一个1元组的列表。没有参数时,它返回一个空的列表。
x = zip(['abcA', 'ccBA', 'djaKP'], [1, 2])
# [('abcA', 1), ('ccBA', 2)]
for i in x:
print(i)
4. filter()函数
filter(func,iter),后面的序列的每一个元素都会被前面的方法进行过滤。
如:
# 只获取大于10的元素
ff = filter(lambda a: a > 10, [55, 16, 2, 3, 9, 77])
print(list(ff))
对列表元素进行去重,使用filter,进行过滤
new_list = []
def my_d(a):
if a not in new_list:
new_list.append(a)
return a
ff = filter(my_d, [55, 16, 2, 3, 9, 77, 55, 2, 3, 78])
print(list(ff))
# 不使用fliter 进行列表去重:
def d(lists):
new_list2 = []
for i in lists:
if i not in new_list2:
new_list2.append(i)
return new_list2
print(d([55, 16, 2, 3, 9, 77, 55, 2, 3, 78]))
5. 累计操作函数reduce()
from functools import reduce
a = reduce(lambda x, y: x * y, range(1, 6))# 1*2*3*4*5
print(a) # 120