IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 递归函数、算法(二分法)、三元表达法、列表生成式、字典生成式、匿名函数、常见内置方法、迭代器 -> 正文阅读

[数据结构与算法]递归函数、算法(二分法)、三元表达法、列表生成式、字典生成式、匿名函数、常见内置方法、迭代器

递归函数

"""

递归:函数在运行过程中? 直接或者间接的调用了自身

"""

官网表示:python默认的最大递归深度1000次

import sys
print(sys.getrecursionlimit())
print(sys.setrecursionlimit(2000))
count = 1   
def index():
    global c
    count +=
    print(co
    print('f
    index() 
index()     
def func()
    print(
    index(
def index(
    print(
    func()
index()   

"""

递归

? ?1.递推

? ? ? ? ? ? ?一层层往下推导答案(每次递归之后的复杂度相较于上一次要有所下降)

? ?2.回溯

? ? ? ? ? ? 依据最后的结论往后推导出最初需要的答案

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

""""

伪代码:可能无法运行 但是可以表述逻辑        
age(5) = age(4) + 2        
age(4) = age(3) + 2        
age(3) = age(2) + 2        
age(2) = age(1) + 2        
age(1) = 18                
def get_age(n):     
    if n == 1:      
        return 18   
    return get_age(n
print(get_age(5))   
#   26

第二种练习题

l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,]]]]]]]]]]]]]]
# 打印出列表中每一个元素(列表除外)

# 1.循环该列表 获取列表内每一个元素
# 2.判断该元素是否是数字 如果是数字 则直接打印
# 3.如果是列表 则循环该列表 获取列表内每一个元素
# 4.判断该元素是否是数字 如果是数字 则直接打印
# 5.如果是列表 则循环该列表 获取列表内每一个元素
# 6.判断该元素是否是数字 如果是数字 则直接打印
# 7.如果是列表 则循环该列表 获取列表内每一个元素

def get_num(l):
    for i in l:
        if type(i) is int:
            print(i)
        else:
            # 也是for循环 然后判断
            get_num(i)
get_num(l)
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
# 11
# 12
# 13
# 14

算法之二分法

# 什么是算法?
?? ?解决问题的高效方法

# 二分法(入门级别:还有一定距离)
?? ?l = [11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111]
# 第一种方式 ?直接for循环从左往右依次查找

# 第二种方式 ?二分法
"""
二分法能够使用的场景 ?数据集必须有序
"""

def my_partner(target_num, l):  # target_num=321  l=l
    if len(l) == 0:
        print('不好意思 我尽力 没找到')
        return
    # 先获取中间位置索引值
    middle_index = len(l) // 2  # 8
    # 判断中间索引对应的值比目标值大还是小
    if target_num > l[middle_index]:
        # 说明要找的元素只可能出现在列表的右侧
        l_right = l[middle_index + 1:]  # l[9:]
        print(l_right)
        my_partner(target_num, l_right)
    elif target_num < l[middle_index]:
        # 说明要找的元素只可能出现在列表的左侧
        l_left = l[:middle_index]
        print(l_left)
        my_partner(target_num, l_left)
    else:
        print('找到了', target_num)
# my_partner(444, l)  找不到 需要添加结束条件
# my_partner(11, l)  # 要查找的元素在开头  那么还没有依次查找的效率高

三元表达式

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

"""
当功能需求仅仅是二选一的情况下 那么推荐使用三元表达式
"""
def my_max(a, b):
    return a if a > b else b
"""
条件成立采用if前面的值 if 条件 else 条件不成立采用else后面的值
三元表达式尽量不要嵌套使用
"""
res = '干饭' if 10 > 2 else '不干饭'
print(res)
res = '干饭' if 10 > 2 else ('不管饭' if 2 >5 else '写的啥!')
print(res)


is_free = input('电影是否收费(y/n)>>>:').strip()
if is_free == 'y':
    print('收费')
else:
    print('免费')
print('收费' if is_free == 'y' else '免费')
username = input('username>>>:')
res = 'NB' if username == 'jason' else 'SB'
print(res)

列表生成式

name_list = ['jason', 'kevin', 'tony', 'jerry']
#  给列表中所有的人名加上_DSB后缀
'''传统做法'''
#  1.定义一个空列表
new_list = []
# 2.循环老列表
for name in name_list:
  # 3.生成新的名字利用格式化输出
    new_name = '%s_DSB' % name
    # 4.添加到新的列表中
    new_list.append(new_name)
print(new_list)
>>>>['jason_DSB', 'kevin_DSB', 'tony_DSB', 'jerry_DSB']

'''列表生成式'''
res = ['%s_DSB' % name for name in name_list]
print(res)
>>>>>['jason_DSB', 'kevin_DSB', 'tony_DSB', 'jerry_DSB']
name_list = ['jason', 'kevin', 'tony', 'jerry']
  # 1.定义一个空列表
new_list = []
# 2.循环老列表
for name in name_list:
    # 3.生成新的名字
    if name == 'jason':
        continue
    else:
        new_name = '%s_DSB' % name
        # 4.添加到新列表中
        new_list.append(new_name)
print(new_list)
>>>['kevin_DSB', 'tony_DSB', 'jerry_DSB']
'''列表生成式'''
res = ['%s_DSB' % name for name in name_list if name != 'jason']
print(res)
>>>['kevin_DSB', 'tony_DSB', 'jerry_DSB']

字典生成式

l1 = ['name','age', 'holbby']
l2 = ['jason', 18, 'read']
new_dict = {}
for i in range(len(l1)):
    new_dict[l1[i]] = l2[i]
print(new_dict)
>>>>{'name': 'jason', 'age': 18, 'holbby': 'read'}




l1 = ['name','age', 'holbby']
l2 = ['jason', 18, 'read']
count = 0
for i in l1:
    print(count,i)
    count +=1
》》》

0 name
1 age
2 holbby

?枚举?(enumerate)? 字典
'''
enumerate(L1)
? ? 针对该方法使用for循环取值 每次会产生两个结果
? ? ? ? 第一个是从0开始的数字
? ? ? ? 第二个是被循环对象里面的元素
? ? 还可以通过start参数控制起始位置
'''

l1 = ['name','age', 'holbby']
l2 = ['jason', 18, 'read']
count = 0
for i in l1:
    print(count,i)
    count +=1
>>>
0 name
1 age
2 holbby
l1 = ['name','age', 'holbby']
l2 = ['jason', 18, 'read'] 

for i, j in enumerate(l1, start=1):
     print(i, j)
》》》
1 name
2 age
3 holbby
'''
enumerate(L1)
? ? 针对该方法使用for循环取值 每次会产生两个结果
? ? ? ? 第一个是从0开始的数字
? ? ? ? 第二个是被循环对象里面的元素
? ? 还可以通过start参数控制起始位置
'''
name_list = ['jason', 'kevin', 'tony', 'jerry']

res = {i: j for i, j in enumerate(name_list) if j != 'jason'}
print(res)
>>>
{1: 'kevin', 2: 'tony', 3: 'jerry'}




res1 = {i for i, j in enumerate(name_list)}
print(res1, type(res1))
>>>
{0, 1, 2, 3} <class 'set'>

# 迭代器
res2 = (i for i,j in enumerate(name_list))
print(res2)

?

匿名函数

匿名函数:没有名字的函数

"""
语法格式
? ? lambda 形参:返回值
"""

?

print(lambda x:x**2)
def index():
    pass
print(index)
print((lambda x: x ** 2)(2))
res = lambda x: x ** 2
print(res(2))

'''匿名函数一般不会单独使用 都是配合其他函数一起使用'''

map()  映射
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def index(n):
    return n ** 2
print(list(map(lambda x:x**2, l)))

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-19 17:52:03  更:2021-11-19 17:54:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:22:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码