直接或间接调用其他函数
递归必需有结束条件
def age(n):
if n == 1:
return 18
# age(5) = age(4) + 2
# age(4) = age(3) + 2
return age(n-1) + 2 # n=2---》age(1)---->age(2)----->age(3)。。。
res=age(5) # 求第5个人的年龄
print(res)
'''递归实现'''
def get_list(l):
for i in l:
if type(i) is int:
print(i)
else:
get_list(i)
get_list(l)
什么是算法:就是解决问题的高效办法
二分法原理:
1. 列表必须先排序(从小到大,从大到小)
2. 折半查找
二分法的使用场景:让你在一个列表中查找某个数字是不是存在
l = [11, 2, 3, 43, 55, 67, 23, 45, 45, 88, 99, 66,]
代码实现二分法(Python代码):
l = [11, 2, 3, 43, 55, 67, 23, 45, 45, 88, 99, 66,]
# l = ['kevin', 'jerry', 'tank', 'abc']
# 1. 排序
l.sort()
# ['abc', 'jerry', 'kevin', 'tank']
# print(l) # [2, 3, 11, 23, 43, 45, 45, 55, 66, 67, 88, 99]
# 2. 去列表的中间那个值,然后给66比较
target_num = 200
def my_half(l,target_num):
if len(l) == 0:
print('没找到')
return
# 3. 取的就是中间的那个索引
middle_index = len(l) // 2 # 向下取整 5 // 2 == 2 6 // 2 == 3
if target_num > l[middle_index]:
l_right = l[middle_index+1:] #
print(l_right)
my_half(l_right, target_num)
elif target_num < l[middle_index]:
l_left = l[:middle_index]
print(l_left)
my_half(l_left, target_num)
else:
print('找到了')
my_half(l, target_num)
冒泡算法思路:
冒泡排序的基本思路是将要排序的列表中的所有元素两两比较,如果顺序不对就将它们交换位置,重复此过程,直到所有元素都按照要求排列好为止。其实现过程可以概括为以下三个步骤:
实例:
# 定义一个名为 bubble_sort 的函数来实现冒泡排序。函数接受一个列表作为参数,其中包含要排序的元素。我们使用 Python 的内置函数 len() 来获取列表的长度,并使用两个嵌套的 for 循环来比较并交换列表中的元素。在最后,我们返回排好序的列表。
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
对于只有二选一的情况,我们推荐使用三元表达式
语法结构:
res = 条件成立之后的结果 if 条件 else 条件不成立之后的结果
实例:
# 写一个比较两个数大小的函数,返回大的
def my_max(a, b):
return a if a > b else b
res = my_max(1, 2)
# 其他例子
res = '不出去玩' if '下雨' else '出去玩'
print(res) # 不出去玩
res = '2' if 2 > 10 else 10
print(res) # 2
语法结构:
variable=[out exp for out exp in input list if out exp==2]
names_list = ['kevin', 'jerry', 'tank', 'oscar']
把列表中得每一个名字后面都拼上后缀_SB
# names_list = ['kevin', 'jerry', 'tank', 'oscar']
# 把列表中得每一个名字后面都拼上后缀_SB
# new_list = [] # 存放拼接之后的人名
# for name in names_list:
# # res = '%s_SB' % name
# res = name + '_SB'
# new_list.append(res)
# print(new_list) # ['kevin_SB', 'jerry_SB', 'tank_SB', 'oscar_SB']
#
# # 列表生成式
# res = [ name + '_SB' for name in names_list]
# print(res)
names_list = ['kevin', 'jerry', 'tank', 'oscar']
# 列表中得每一个名字都拼接上后缀:_SB,除jerry之外
new_list = []
for name in names_list:
if name == 'jerry':
new_list.append(name)
continue
else:
new_list.append(name+'_SB')
print(new_list)
字典生成式,集合生成式(了解)
l1 = ['name', 'age', 'gender']
l2 = ['oscat', 18, 'male']
# d= {'name':oscat, age:18, 'gender':'male'}
# d = {}
# for i in range(len(l1)):
# d[l1[i]] = l2[i]
#
# print(d) # {'name': 'oscat', 'age': 18, 'gender': 'male'}
"""
补充一个方法:enumarate
"""
# for i, j in enumerate(l1):
# # (0, 'name')
# # (1, 'age')
# # (2, 'gender')
# print(i, j)
d = {l1[i]:l2[i] for i, j in enumerate(l1)}
print(d) # 0: 'name', 1: 'age', 2: 'gender'}
"""没有元组生成式"""
s = {i for i, j in enumerate(l1)} # 生成器
print(s)
t = (i for i, j in enumerate(l1))
print(t)