递归函数,二分法算法,列表和字典生成式,匿名函数


递归函数

# 直接或者间接的调用自己

# 直接或者简介调用自己
import sys

# print(sys.getrecursionlimit())
# sys.setrecursionlimit(2000)
# print(sys.getrecursionlimit())
# count = 1
# def index():
#     print('from index')
#     global count
#     count += 1
#     print(count)
#     index()
#
#
# index()

'''
    递归深度默认是1000次,递归深度是可以查看和更改的
'''
#
# def index():
#     print('from index')
#     func()
# def func():
#     print('from func')
#     index()
# func()

# age(5) = age(4) + 2  # 26
# age(4) = age(3) + 2  # 24
# age(3) = age(2) + 2  # 22
# age(2) = age(1) + 2  # 20
# age(1) = 18

'''
    递归一定一定要有结束条件!!!
'''


# def age(n):
#     # return age(n - 1) + 2 # age(4)+2
#     # return age(n - 1) + 2 # age(3)+2
#     # return age(n - 1) + 2 # age(2)+2
#     if n==1:
#         return 18
#     return age(n - 1) + 2 # age(1)+2
#
# print(age(5))

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

# 第一种方式:
# for i in l:
#     if type(i) is int:
#         print(i)
#     else:
#         # 说明当前循环的数据类型是列表
#         for j in i:
#             # 判断j是什么类型
#             if type(j) is int:
#                 print(j)
#             else:
#                 # 说明当前循环的数据类型是列表
#                 for k in j:
#                     if type(k) is int:
#                         print(k)
#                     else:
#                         # 说明当前循环的数据类型是列表
#                         for x in k:
#                             if type(x) is int:
#                                 print(x)
#
#

# 第二种方式:
def get_num(l):
    for i in l:
        if type(i) is int:
            print(i)
        else:
            get_num(i)
get_num(l)

三元表达式

# def my_max(a, b):
#     if a > b:
#         return a
#     else:
#         return b
#
#
# print(my_max(1, 2))

# 针对上述只有两种情况的判断,我们可以使用三元表达式
# a = 1111
# b = 211
# res = a if a > b else b
# print(res)

#### 不推荐使用,但是,面试的时候使用

# a = 1111
# b = 2111
# username = 'ly'
# res = a if a > b else ('world' if False else ('帅哥' if username == 'ly' else 'dsb'))
# print(res)

##### 让用户输入判断
cmd = input('username:').strip()
# if cmd == 'ly':
#     print('帅哥')
# else:
#     print('dsb')

res = '帅哥' if cmd == 'ly' else 'dsb'
print(res)

算法之二分法

# 什么是算法
	就是解决问题的高效方法
    
# 二分法
# 常见的算法:冒泡算法, 二分法,选择排序

l = [1, 2, 3, 4, 5, 6, 11, 22, 34, 44, 55, 66, 67, 333, 444]
# 第一种方式

# for i in l:
#     if i == 66:
#         print('找到了')

# 1. 排序
# l.sort()
def my_half(target_num, l):
    # target_num = 34
    # l
    # 1. 从列表中去一个中间值
    middle_index = len(l) // 2  # 7

    # 2. 比较
    if target_num > l[middle_index]:
        # 要找的元素在右边
        l_right = l[middle_index + 1:]
        my_half(target_num, l_right)
        print(l_right)
    elif target_num < l[middle_index]:
        # 要找的元素一定在左边
        l_left = l[:middle_index]
        my_half(target_num, l_left)
        print(l_left)
    else:
        print('找到了,哈哈哈哈')

列表生成式(掌握)

l = ['ly', 'jason', 'tom']

new_list = []
# 第一种方式:
# for i in l:
#     new_list.append(i +'_dsb')
#
# print(new_list)

# 第二种方式:
# res = [i + '_dsb' for i in l]
# print(res)

# 传统写法:
# for i in l:
#     if i != 'jason':
#         new_list.append(i+'_dsb')
#     else:
#         new_list.append(i)

# 列表生成式:
# res = [i + '_dsb' for i in l if i != 'jason' ]
res = [i + '_dsb' if i != 'jason' else i for i in l]
print(res)

字典生成式(了解)

l = ['ly', 'jason', 'tom']

new_list = []
# 第一种方式:
# for i in l:
#     new_list.append(i +'_dsb')
#
# print(new_list)

# 第二种方式:
# res = [i + '_dsb' for i in l]
# print(res)

# 传统写法:
# for i in l:
#     if i != 'jason':
#         new_list.append(i+'_dsb')
#     else:
#         new_list.append(i)

# 列表生成式:
# res = [i + '_dsb' for i in l if i != 'jason' ]
# res = [i + '_dsb' if i != 'jason' else i for i in l]
# print(res)


# 字典生成式
l1 = ['name', 'age', 'hobby']
l2 = ['ly', 18, 'music']
# 补充:
# for i,j in enumerate(l1, start=2):
#     print(i,j)

# 定义一个空字典
# new_dict = {}
# for i in range(len(l1)):
#     new_dict[l1[i]] = l2[i]
#
# print(new_dict)


# 字典生成式
# res = {l1[i]: l2[i] for i, j in enumerate(l1)}
# print(res)

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

# 生成器
# res = (l1[i] for i, j in enumerate(l1))
# print(res)

匿名函数

# 没有名字的函数

'''
	语法格式:
		lambda 参数:返回值
'''

def index(x):
    return x ** 2


# print(index)
# print((lambda x:x**2)(2))  # 目的:不是这样用的,不会单独使用匿名函数

# res = lambda x:x**2
# print(res(2))

# 结合一些内置函数使用
l = [1, 2, 3, 4, 5, 6]


# map函数
# def add(i):
#     return i + 1

# zip...
res=list(map(lambda x:x**3, l))
print(res)

相关