python基础day16 简单算法生成式及常见内置函数

算法之二分法

算法就是解决问题的高效办法

二分查找法

l = [1, 2, 32, 15, 16, 65, 6,  51, 12, 20, 95, 42, 61, 25, 3]
# 查找列表中是否有66
1. for循环遍历
for i in l:
    if i = 66:
    print('找到了')

2.二分法实现
# 1. 先排序
l.sort()
# 2.定义一个目标数据
target = 200

def my_half(target, 1):
    '''判断列表的长度是否为0'''
    if len(l) == 0:
        print('要找的数据不在列表中')
        return
# 3. 从列表的中间取一个值
# 得到的是中间数据的索引值
    middle_index = len(l)//2  # 整除
    if target > l[middle_index]:
        # 说明目标数据在列表的右侧
        l_right = l[middle_index + 1:]
        print(l_right)
        my_half(targht, l_right)
    elif targht < l[middle_index]:
        # 说明目标数据在列表左侧
        l_left = l[: middle_index]
        print(l_left)
        my_half(targht, l_left)
    else:
        print('找到了')

my_half(targht, l)

三元表达式

语法结构:

  条件成立返回 if前面的值  if 条件  else  条件不成立返回else后面的值

使用场景:

只有当需求功能是二选一的情况下,才使用三元表达式

# 比较两个数的大小
res = 'boy' if 6 < 6 else 'girl'
print(res)

还支持嵌套

is_beautiful = True
res = '干饭' if 1 > 2 else ('学习' if False else ('喜欢' if is_beautiful == True else '不喜欢'))
print(res)

列表生成式

name_list = ['kevin', 'jack', 'tom', 'jerry']
# 给每个名字后面加个_boy
# re_name = []
# for i in name_list:
#     re_name.append('%s_boy' % i)
# print(re_name)
new_name_list = [name + '_boy' for name in name_list]
print(new_name_list)
res = [i+'_DSB' if i != 'tom' else i for i in name_list]
print(res)

其他生成式

"""
补充一个方法:enumerate
    1. 循环enumerate方法可以得到两个值
        索引、元素
    
"""
# for i, j in enumerate(l, start=2):
#     print(i, j)

# 字典生成式
res = {i: j for i, j in enumerate(l) if j != 'name'}
print(res)

# 集合生成式
res = {i for i, j in enumerate(l)}
print(res)

# 元组
res1 = (i for i in enumerate(l)) # 生成器
print(res1)

匿名函数

就是没有名字的函数;之前使用def关键字定义的函数都是有名字函数

语法格式:

  lambda 形参 :返回值

print((lambda a:a+2)(2))

一般不会单独使用,会配合几个常见的内置函数使用

 

常见的内置函数

map

# map  # 底层就是for循环
L = ['jack', 'kevin']
print(list(map(lambda a: a + '_DSB', l)))
L1 = [1, 3, 5, 7, 9]
print((list(map(lambda b: b * 4, l1))))

zip

# zip  类似拉链
l = [1, 2, 3, 5, 9]
l1 = ['kevin', 'age', 'hobby']
print(list(zip(l, l1)))
for i, j in enumerate(l):  # i代表索引位置
    print(i, j)

max min

# l1 = [1,2,3,4,5]
# print(max(l1))
# print(min(l1))
# s = ['kevin', 'tank', 'jerry']
# print(max(s))

d = {
    'kevin': 2000,
    'tank': 1000,
    'oscar': 300000,
}
# def index(key):
#     return d[key]
# print(max(d, key=index))  # tank
print(max(d, key=lambda key: d[key]))  # tank
print(min(d, key=lambda key: d[key]))  # tank

filter

# filter  过滤
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(filter(lambda a: a != 5, l)))  # [1, 2, 3, 4, 6, 7, 8, 9]
print(list(filter(lambda a: a == 5, l)))  # [5]
print(list(filter(lambda a: a > 5, l)))  # [6, 7, 8, 9]
print(list(filter(lambda a: a < 5, l)))  # [1, 2, 3, 4]

 

posted @ 2023-06-01 17:06  吼尼尼痛  阅读(23)  评论(0)    收藏  举报