一、算法
1.介绍
算法是通过数学模型运算得到某些数据的过程,在python中通过与代码相结合,可以在特定场景下很方便的解决问题
2.应用场景
很广,大数据推广就是利用算法做的
3.二分法——一个很基础的算法
# 别学我写中文,很Low的,我只是想明了一点,英语太水了
# 比如说我手里一个列表,想找到一个指定的值,就比如说拿888吧
l1 = [1232,564,989,1,53,63,888,6,3,99,153]
目标数据 = 888
# 确实可以用for循环之类的法子,今天我们用二分法试试,就是我先拿一半找,如果没找到,我再拿一半找
————————————————————————————————————
l1.sort() # 复习一下列表排序内置方法
l2 = l1[1:5] # 复习一下列表切片 切好赋值给一个变量名接收
—————————————————————————————————————
middle_index = len(l1) //2 # 搞到l1表数据位置的一半的那个值的索引值
# 然后就拿这个索引位置的值和目标值比大小呗
# 先加一个结束条件
if len(list_1) == 0: # l1都被分完了都找不到
print('不行哦,找不到')
if 目标数据 > l1[middle_index]: # 那前半段列表就可以丢了
右边_l1 = l1[middle_index + 1 :] # 切片中间下一位置到列表末尾
return func(右边_l1, 目标数据) # 然后循环
elif 目标数据 < l1[middle_index]: # 那后半段可以丢了
左边_l1 = l1[:middle_index + 1] # 切片开头到中间
return func(左边_l1, 目标数据) # 然后循环
else:
print(f'找到了您要的{}')
————————————————————————————————————
把上面功能封装成一个函数,以后想完成类似的功能都可以直接用这个函数,传参就行了
def func(l1, 目标数据):
if len(list_1) == 0: # l1都被分完了都找不到
print('不行哦,找不到')
if 目标数据 > l1[middle_index]: # 那前半段列表就可以丢了
右边_l1 = l1[middle_index + 1 :] # 切片中间下一位置到列表末尾
return func(右边_l1, 目标数据) # 然后循环
elif 目标数据 < l1[middle_index]: # 那后半段可以丢了
左边_l1 = l1[:middle_index + 1] # 切片开头到中间
return func(左边_l1, 目标数据) # 然后循环
else:
print(f'找到了您要的{}')
func(l1, 888)
二、三元表达式
1.介绍
用于二选一的情况下,简单的判断简单的代码,如果过于复杂不推荐用
尽量别嵌套使用。
2.用法
拿一个变量名接收 条件成立时返回的值 if 条件 else 条件不成立时要返回的值
def func(x, y):
if x > y:
return x
else:
return y
res = func(666, 999)
print(res)
>>>
999
# 这是一个简单的对比函数,一个条件成立输出啥啥啥个条件不成立输出啥啥啥
——————————————————————————————
# 如果用三元
res = x if x > y else y # 这就设定好了,如果要用,在三元上方传参即可
_______________________________
x = 666
y = 999
res = x if x > y else y
print(res)
>>>
999
三、各种生成式
1.列表生成式
>>>当你想对列表里面所有数据值操作同样的事可以用, 也可以单独拿一个值,对这个值搞点事情后输出来 ————支持for if range()
新列表 = [想要的功能 for name in 老列表]
运行是for循环的代码先执行,然后得到的值和前面功能结合
# 有一个列表,给里面的每个值+1
name_list = [1,33,44,666,556,245,888]
——————————————————————————————
# 如果用for循环
new_name_list = []
for i in name_list:
new_name_list.append(i + 1)
print(new_name_list)
——————————————————————————————
# 如果用列表生成式
new_name_list = [i + 1 for i in name_list]
print(new_name_list)
———————————————————————————————
# 如果我想给666+1呢,其他不加
new_name_list = [i + 1 for i in name_list if i == 666]
print(new_name_list)
2.字典生成式
-
拓展 :enumerate ——一个内置函数
将一个可遍历的数据对象(如列表、元组、字典和字符串)组合成一个索引序列,同时列出数据下标和数据(索引 值),一般配合for循环使用。
语法:enumerate(对象, 下标起始位置(默认0))
l1 = ['杰克', 28, '泰坦驾驶员']
t = list(enumerate(l1))
print(t)
>>>
[(0, '杰克'), (1, 28), (2, '泰坦驾驶员')]
____________________________________
用字典生成式生成一个字典
dict = {i:k for i,k in enumerate(l1, 1)}
print(dict)
info = ['name','age','gender']
dic = {key:666 for key in info}
print(dic)
3.集合生成式
info = ['name', 'age', 'city']
set1 = {key for key in info}
print(set1, type(set1))
>>>
{'age', 'city', 'name'} <class 'set'>
4.元组生成式
没有,只有生成器
四、匿名函数
1.介绍
没有名字的函数,关键字lambda
用来顶替掉一些简单的函数(简化代码)
2.用法:
lambda 形参:返回值
等价于
def 函数名(参数):
函数体
return 返回值
针对能比较简单,又不得不用函数的场景
匿名函数一般不单独使用,需要配合其他函数一起用
3.一些匿名函数
1.map()映射
语法:map(想干嘛的函数名, 可迭代对象)
l1 = [11, 22, 33, 44, 55, 66]
def func(a):
return a + 1
res = map(lambda x: x + 100, l1)
print(list(res))
>>>
[111, 122, 133, 144, 155, 166]
2.max mix
把第二个例子再梳理一次,说说顺序
3.reduce(已经被python内置函数移除掉了,要进模块才能用)
不管传多个,根据你后面写的功能后 只返一个
reduce默认有一个数据值0
标签:name,python,生成式,list,列表,day14,l1,print,函数 From: https://www.cnblogs.com/wznn125ml/p/16790095.html