zoukankan      html  css  js  c++  java
  • 生成式,二分法

    一、三元表达式

    三元表达式:
    1.当x大的时候返回x,当y大的时候返回y
    2.当某个条件成立做一件事,不成立做另一件事

    三元表达式固定表达式:
    1.
    值(1) if 条件 else 值(2)
    条件成立 值(1)
    条件不成立 值(2)
    2.三元表达式只推荐两种选择的情况下(是或非)

    例子1:
    用普通的方法比较两个值的大小:6行代码

    def my_max(x, y):
        if x > y:
            return print(x)
        else:
            return print(y)
    my_max(10, 20)
    

    例子1(三元表达式):关键代码1行

    x = 1
    y = 2
    res = x if x > y else y  # 如果if后面的条件成立返回if前面的值,否则返回后面的值
    print(res)
    

    例子2:收费免费

    is_free = input('请输入是否免费(y/n)>>>:')
    is_free = '免费' if is_free == 'y' else '收费'
    print(is_free)
    

    二、算法——二分法

    算法:解决问题的高效率的方法

    1.找元素是否在一个列表中

    普通方法 for i in k :

    k = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    for i in k:
        if num == i:
            print("找到了:%s" % i)
    

    2.二分法:

    1.容器中的数字必须有大小顺序
    2.依次和中间的数进行比较大小,小于取左,大于取右
    排序: sort()升序,sort(reverse=Ture)降序,reverse()反转,逆序排列

    l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    l.sort()  # 重新升序排序
    def get_num(l, num):
        # 取列表中间数索引位置
        num_middle = len(l) // 2
        # 这个数不在列表中,切到后面就是空列表,空列表就直接返回
        if not l:
            return print("列表中找不到", num)
        print(l) # 打印每次切片后的列表
        # 判断大小
        if num > l[num_middle]:
            # 切片右半部
            right_num = l[num_middle + 1:]
            get_num(right_num, num)
        elif num < l[num_middle]:
            # 切去左半部
            left_num = l[:num_middle]
            get_num(left_num, num)
        else:
            print("列表中找到了", num)
    
    
    get_num(l, 9)
    

    三、列表生成式

    m = ['jeff','jiamin','nick','xiaomin]

    给列表添加后缀:_sb
    普通方法:for 循环遍历打印append方法添加
    列表生成式:['%s_sb'%name for name in m]

    例子1:列表元素添加后缀

    第一种:普通for循环方法
    m = ['jeff','jiamin','nick','xiaoming']
    m1 = []
    for name in m:
        m1.append('%s_sb'%name)
    print(m1)
    

    第二种:列表生成式方法

    m = ['jeff','jiamin','nick','xiaoming']
    res = ['%s_sb'%name for name in m]
    print(res)
    

    例子2:从列表中帅选带有_sb的元素

    k = ['jeff_sb', 'jiamin_sb', 'nick_sb', 'xiaoming_sb','xiaowang_NB']
    res = [name for name in k if name.endswith("_sb")]  #endswith:字符串结束位置检测
    print(res)
    

    img

    四、字典生成式

    需求:把两个列表变成一个字典
    m1 = ['name', 'password', 'age', 'gender']
    m2 = ['jeff', '123', '18', '男']

    1.普通for循环方法
    m1 = ['name', 'password', 'age', 'gender']
    m2 = ['jeff', '123', '18', '男']
    d = {}
    for i, j in enumerate(m1):    # enumerate方法查看元素的索引和值,默认0开始
        print(i, j)  # 查看m1的索引和值,m1索引=i,m1的值=j
        d[j] = m2[i]
    print(d)
    
    

    img

    2.字典生成式:

    d = {i: j for i, j in enumerate(m2)}
    print(d)
    
    

    img

    加 if 判断:去除 j=123

    d = {i: j for i, j in enumerate(m2) if j != '123'}
    print(d)
    
    

    img

    五、集合生成式

    例子:0-9并去除4

    res = {i for i in range(10) if i != 4}
    print(res)
    
    

    img

  • 相关阅读:
    Vitrualbox虚拟机网络设置
    挂接命令(mount) 【转】
    ubuntu Error mounting /dev/sda6 at /media/xxx...
    mysql命令[转]
    fopen参数
    fprintf&prinft&sprintf
    UNIX 网络编程知识,函数积累
    vim 括号自动补全
    CDbConnection failed to open the DB connection
    [Android_蓝牙]Android4.0蓝牙使能的详细解析
  • 原文地址:https://www.cnblogs.com/WQ577098649/p/11887439.html
Copyright © 2011-2022 走看看