0%

python内置函数

  • filter()
1
2
3
4
5
6
7
8
9
10
11
12
13
# Python高级内置函数
filter()函数用于过滤序列,过滤掉不符合条件的元素,返回符合条件的元素组成新列表。语法如下
filter(function,iterable)
其中function为只接收一个参数的函数,iterable为可迭代序列
实例
# 过滤0-9的偶数
filter_result = filter(lambda n:n%2==0,[0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# function作用在每个元素上,若函数返回为True,则加入结果中
# filter()返回为一个filter对象
list(filter_result) = [0, 2, 4, 6, 8]

# 引申1:itertools模块中filterfalse函数与filter函数类似,区别在于filterfalse函数当function返回False时产出结果
# 引申2:itertools模块中takewhile函数,当funtion返回真值时产出对应的元素,然后立即停止,不再继续检查
  • map()
1
2
3
4
5
6
7
8
9
10
11
12
# Python高级内置函数
map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
map(funciton,iterable)
其中function为只接收一个参数的函数,iterable为可迭代序列
实例
map_result = map(lambda n:n*2,(1, 2, 3, 4))
# function作用在每个元素上,并返回结果
# map()返回一个map对象
list(map_result) = [2, 4, 6, 8]

# 引申:itertools模块中的accumulate函数,accumulate(it, [func]),产出累积的总和;如果提供了func,那么把前两个元素传给它,然后把计算结果和下一个元素传给它,以此类推,最后产出结果。
# 引申2:itertools模块中的starmap函数,starmap(func, it),把it中的各个元素传给func,产出结果;输入的可迭代对象应该产出可迭代对象iit,然后以func(*iit)这种形式调用func
  • reduce()
1
2
3
4
5
6
7
8
9
10
11
12
# Python3中reduce不是内置函数,使用时需要从functools中导入
# from functools import reduce
reduce的工作过程是 :在迭代sequence(tuplelist ,dictionary, string等可迭代物)的过程中,首先把 前两个元素传给 函数参数,函数加工后,然后把得到的结果和第三个元素作为两个参数传给函数参数, 函数加工后得到的结果又和第四个元素作为两个参数传给函数参数,依次类推。 如果传入了 initial 值, 那么首先传的就不是 sequence 的第一个和第二个元素,而是 initial值和 第一个元素。经过这样的累计计算之后合并序列到一个单一返回值
reduce(function, sequence[,initial])

实例(不传入initial值)
reduce_result1 = reduce(lambda a,b:a+b, [1,2,3,4])
reduce_result1 = 10

实例(传入initial为3
reduce_result2 = reduce(lambda a,b:a+b, [1,2,3,4], 3)
reduce_result2 = 13
  • zip()
1
2
3
4
5
6
7
8
9
10
# zip是python3中内置高级函数,表达式zip(it, ..., itN)
# 并行从输入的各个可迭代对象中获取元素,产出由N个元素组成的元组,只要有一个可迭代对象到头了,就默默停止。
lst1 = [1, 2, 3]
z1 = zip(lst1)
print(z1) # <zip object at 0x000001745B93EF80>
print(list(z1)) # [(1,), (2,), (3,)]
lst2 = [2, 3]
z2 = zip(lst1,lst2)
result = ((x, y) for x, y in z2)
print(list(result)) # [(1, 2), (2, 3)]
  • 归约函数

    • all(it) :it中的所有元素都为真值时返回True,否则返回False,all([])返回True
    • any(it) :只要it中有元素为真值就返回True,否则返回False,any([])返回False
    • max(it, [key=,] [default=]) :返回it中值最大的元素,key是排序函数,与sorted函数一样;如果可迭代对象为空,返回default
    • min(it, [key=,] [default=]) :返回it中值最小的元素,key是排序函数,与sorted函数一样;如果可迭代对象为空,返回default
    • functiontools.reduce,如上述。
    • sum(it, start=0):it中所有元素的综合,如果提供可选的start,会把它加上(计算浮点数的加法时,可以使用math.fsum函数提高精度)
  • iter()特殊用法:iter(obj, sentinel),传入两个参数,使用常规的函数或任何可调用的对象创建迭代器。其中obj必须是可调用的对象,用于不断调用(没有参数),产出各个值,比如range(3);sentinel是哨兵,是一个标记值,当可调用对象返回这个值时,触发迭代器抛出StopIteration异常,而不产出哨兵的值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 实例1:
    def d6():
    return randint(1, 6) # 随机产生1-6
    d6_iter = iter(d6, 3) # 返回一个迭代器
    for i in d6_iter:
    print(i) # 不断产生值,当产出的值为3的时候停止
    # 实例2:逐行读取文件,直到遇到空行或者到达文件的末尾为止
    with open("test.txt") as fp:
    for line in iter(fp.readline, '\n'):
    process_line(line)
  • list.sort和sorted

    • list.sort会就地排序列表,即对原列表直接排序,不会把原列表复制一份,这个方法返回None

    • 内置函数sorted会新建一个列表作为返回值,sorted可以接受任何形式的可迭代对象作为参数,甚至包括不可表序列或生成器。不管sorted接受什么样的参数,都会返回一个列表。

    • list.sort和sorted两个可选的关键字参数

      • reverse,如果被设定为True,则降序输出,默认为False

      • key,一个只有一个参数的函数,这个函数会作用在序列里的每一个元素上,所产出的结果作为排序算法依赖的关键字,默认是恒等函数,即默认使用元素自己的值进行排序

        1
        2
        3
        list1 = ['banana', 'apple', 'pear']
        list2 = sorted(list1, key=len) # 将会以元素的长度作为关键字进行排序
        print(list2) # ['pear', 'apple', 'banana']