1. lamda匿匿名函数2. sorted()
3. filter()
4. map()
5. 递归函数

一. lamda 匿名函数

 为了了解决一些简单的需求⽽设计的⼀句话函数

语法:

函数名 = lambda 参数: 返回值

# 计算n的n次⽅

 s = lambda a: a *a
 print(s(10))
  1. 函数的参数可以有多个.多个参数之间⽤用逗号隔开

  2. 匿匿名函数不管多复杂.只能写⼀一⾏行行,且逻辑结束后直接返回数据

  3. 返回值和正常的函数⼀一样,可以是任意数据类型

二. sorted()  排序函数.   需要一个新变量名去接  

语法: sorted(Iterable, key=None, reverse=False)

Iterable: 可迭代对象
key: 排序规则(排序函数), 在sorted内部会将可迭代对象中的每⼀个元素传递给这个函数的参数. 根据函数运算的结果进行排序

reverse: 是否是倒叙. True: 倒叙, False: 正序

 lst = [1,5,3,4,6]
 lst2 = sorted(lst)
 print(lst) # 原列列表不不会改变 print(lst2) # 返回的新列列表是经过排序的
 dic = {1:'A', 3:'C', 2:'B'}
 print(sorted(dic)) # 如果是字典. 则返回排序过后的key

 # [1, 5, 3, 4, 6]
 # [1, 2, 3]

和函数组合使⽤ key = func

 # 根据字符串串⻓长度进⾏行行排序
lst = ["麻花藤", "冈本次郎", "中央情报局", "狐仙"]
# 计算字符串串⻓长度
def func(s):
    return len(s)
print(sorted(lst, key=func))

# ['狐仙', '麻花藤', '冈本次郎', '中央情报局']

和lambda组合使⽤

lst = [{"id":1, "name":'alex', "age":18},
       {"id":2, "name":'wusir', "age":16},
       {"id":3, "name":'taibai', "age":17}]
# 按照年年龄对学⽣生信息进⾏行行排序
print(sorted(lst, key=lambda e: e['age']))

#[{'id': 2, 'name': 'wusir', 'age': 16}, {'id': 3, 'name': 'taibai', 'age': 17}, {'id': 1, 'name': 'alex', 'age': 18}]

三. filter()筛选函数

语法: filter(function. Iterable)

function: ⽤用来筛选的函数. 在filter中会⾃自动的把iterable中的元素传递给function. 然后

根据function返回的True或者False来判断是否保留留此项数据Iterable: 可迭代对象

lst = [1,2,3,4,5,6,7]
ll = filter(lambda x: x%2==0, lst) # 筛选所有的偶数 print(ll)
print(list(ll))

# [2, 4, 6]

lst = [{"id":1, "name":'alex', "age":18},
       {"id":2, "name":'wusir', "age":16},
       {"id":3, "name":'taibai', "age":17}]
fl = filter(lambda e: e['age'] > 16, lst)
print(list(fl))

# [{'id': 1, 'name': 'alex', 'age': 18}, {'id': 3, 'name': 'taibai', 'age': 17}]

四. map()映射函数

语法: map(function, iterable) 可以对可迭代对象中的每⼀个元素进⾏映射. 分别执行function

 # 计算列列表中每个元素的平⽅方 ,返回新列列表
 def func(e):
     return e*e
 mp = map(func, [1, 2, 3, 4, 5])
 print(mp)  # <map object at 0x1031a4400>
 print(list(mp))  #[1, 4, 9, 16, 25]

 # 改写成lambda
 print(list(map(lambda x: x * x, [1, 2, 3, 4, 5]))) #[1, 4, 9, 16, 25]

 #计算两个列列表中相同位置的数据的和
 lst1 = [1, 2, 3, 4, 5]
 lst2 = [2, 4, 6, 8, 10]
 print(list(map(lambda x, y: x+y, lst1, lst2)))
 # [1, 4, 9, 16, 25]

五. 递归

在函数中调⽤用函数本⾝身. 就是递归

def func(): print("我是谁")
    func()
func()

在python中递归的深度最⼤大到997

def foo(n):
    print(n)
n += 1
    foo(n)
foo(1)

递归的应⽤:

我们可以使用递归来遍历各种树形结构, 比如我们的文件夹系统. 可以使⽤递归来遍历该文件夹中的所有文件

 import os
 def read(filepath, n):
     files = os.listdir(filepath) # 获取到当前⽂文件夹中的所有⽂文件
     for fi in files: # 遍历⽂文件夹中的⽂文件, 这⾥里里获取的只是本层⽂文件名
         fi_d = os.path.join(filepath,fi) # 加⼊入⽂文件夹 获取到⽂文件夹+⽂文件
         if os.path.isdir(fi_d): # 如果该路路径下的⽂文件是⽂文件夹
             print("\t"*n, fi)
             read(fi_d, n+1)
         else:
             print("\t"*n, fi)
 #递归遍历⽬目录下所有⽂文件
 read('../oldboy/', 0)

六. 二分查找

二分查找. 每次能够排除掉一半的数据. 查找的效率非常高. 但是局限性比较⼤大. 必须是有序序列才可以使⽤二分查找

要求: 查找的序列 必须是 有序序列

⼆分查找  非递归算法
# 判断n是否在lst中出现. 如果出现请返回n所在的位置
# ⼆分查找  非递归算法
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
n = 567
left = 0
right = len(lst) - 1
count = 1
while left <= right:
    middle = (left + right) // 2
    if n < lst[middle]:
        right = middle - 1
    elif n > lst[middle]:
        left = middle + 1
    else:
        print(count)
        print(middle)
        break
    count = count + 1
else:
    print("不不存在")

普通递归版本二分法

lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
def binary_search(n, left, right):
    if left <= right:
        middle = (left+right) // 2
        if n < lst[middle]:
            right = middle - 1
        elif n > lst[middle]:
            left = middle + 1
        else:
            return middle
        return binary_search(n, left, right)
        # 这个return必须要加.否则接收到的永远是None.
    else:
        return -1

另类⼆二分法, 很难计算位置

lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]

# 另类⼆二分法, 很难计算位置.
def binary_search(ls, target):
    left = 0
    right = len(ls) - 1
    if left > right:
        print("不不在这⾥里里")
    middle = (left + right) // 2
    if target < ls[middle]:
        return binary_search(ls[:middle], target)
    elif target > ls[middle]:
        return binary_search(ls[middle+1:], target)
    else:
        print("在这里")
binary_search(lst, 567)

【学习笔记】--- 老男孩学Python,day15 python内置函数大全,递归,二分法的更多相关文章

  1. Python基础学习笔记(七)常用元组内置函数

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxue ...

  2. Python基础学习笔记(八)常用字典内置函数和方法

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-dictionary.html 3. http://www.lia ...

  3. python记录_day14 内置函数二 迭代 二分法

    一.匿名函数 形式: lambda 形参:返回值 lambda表示的是匿名函数. 不需要用def来声明, 一句话就可以声明出一个函数.匿名函数不是说一定没名字,而是他们的名字统一称为“lambda”, ...

  4. Python的常用内置函数介绍

    Python的常用内置函数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.取绝对值(abs) #!/usr/bin/env python #_*_coding:utf-8_ ...

  5. python 常见的内置函数

    内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这 ...

  6. python之路——内置函数和匿名函数

    阅读目录 楔子 内置函数 匿名函数 本章小结 楔子 在讲新知识之前,我们先来复习复习函数的基础知识. 问:函数怎么调用? 函数名() 如果你们这么说...那你们就对了!好了记住这个事儿别给忘记了,咱们 ...

  7. python常用的内置函数哈哈

    python常用的内置函数集合做一个归类用的时候可以查找 abs 返回数字x的绝对值或者x的摸 all (iterable)对于可迭代的对象iterable中所有元素x都有bool(x)为true,就 ...

  8. python常用的内置函数

    python常用的内置函数集合做一个归类用的时候可以查找- abs 返回数字x的绝对值或者x的摸 - all (iterable)对于可迭代的对象iterable中所有元素x都有bool(x)为tru ...

  9. 十六. Python基础(16)--内置函数-2

    十六. Python基础(16)--内置函数-2 1 ● 内置函数format() Convert a value to a "formatted" representation. ...

随机推荐

  1. rocketmq学习

    官网地址 安装name server和broker git clone https://github.com/apache/incubator-rocketmq.git cd incubator-ro ...

  2. libevent源码剖析

    libevent是一个使用C语言编写的,轻量级的开源高性能网络库,使用者很多,研究者也很多.由于代码简洁,设计思想简明巧妙,因此很适合用来学习,提升自己C语言的能力. libevent有这样显著地几个 ...

  3. day 34 js 基础后部分 BOM 和 事件和正则

    前情提要 今天主要学习的是bom 和事件 一:正则表达式 <!DOCTYPE html> <html lang="en"> <head> < ...

  4. css之px自动转rem—sublime 插件CSSREM

    CSSREM CSSREM 是一个CSS的 px 值转 rem 值的Sublime Text3自动完成插件.先来看看插件的效果: 一个CSS的px值转rem值的Sublime Text 3自动完成插件 ...

  5. (转) mysql之status和variables区别及用法详解

    原文:http://blog.csdn.net/andyzhaojianhui/article/details/50052117

  6. as和is,但is也有as所没有的功能[C#] --转载 甘木

    在C#中,我们可以使用is as操作符来判断某数据类型和其它指定类型的关系 1. 用is运算符验证基础类型 C#允许在继承链中向下转型,所以如果DerivedClass派生自BaseClass,那么D ...

  7. 6.6. Access Control

    解读 6.6.2.2. Qualified Access to a protected Constructor https://docs.oracle.com/javase/specs/jls/se7 ...

  8. mybatis异常:Error instantiating class com.psc.bean.User with invalid types () or values ().

    Error instantiating class com.psc.bean.User with invalid types () or values (). 是由于bean类没有无参构建方法,添加一 ...

  9. centos7的防火墙配置

    centos7 不在使用iptables作为防火墙, 而是使用firewalld规则, 好吃是支持动态更新, 不需要重启服务, 第二个就是加入了zone概念. 所以和centos6在防火墙配置上有很大 ...

  10. [心平气和读经典]The TCP/IP Guide(005)

    The TCP/IP Guide[Page 47, 48, 49] I created The TCP/IP Guide to provide you with an unparalleled bre ...