生成式,二分法

半世苍凉 提交于 2019-12-04 23:13:41

一、三元表达式

三元表达式:
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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!