排序和查找
排序
排序:将多个数据按顺序排列。有冒泡、选择、插入、希尔、归并、快速、堆、计数、捅、基数排序。
冒泡排序
冒泡排序 Bubble Sorting:重复地走访需要排序地元素列表,依次比较相邻的元素,如果顺序错误就交换位置,直至完成。最大/最小元素会慢慢浮到顶/底端,形如冒泡。
num_list = [24, 69, 80, 57, 13, 22]
print("排序前".center(32, "-")) # ---排序前--- 参数为宽度和字符
print(f"num_list: {num_list}")# num_list.sort() #内置函数排序# 使用冒泡排序
def bubble_sort(my_list):"""功能:对传入的列表完成从小到大的排序:param my_list: 传入的列表:return: 无(修改列表会修改原列表)"""# i控制比较轮次for i in range(1, len(my_list)):# j控制比较的次数,同时可以作为比较元素的索引下标for j in range(0, len(my_list) - i):if my_list[j] > my_list[j + 1]:my_list[j], my_list[j + 1] = my_list[j + 1], my_list[j]# print(f"第{i}轮排序的结果my_list=", my_list)bubble_sort(num_list)
print("排序后".center(32, "-"))
print(f"num_list: {num_list}")
查找
常见的查找方法:顺序、二分、插值、斐波那契、数表、分块、哈希查找
顺序查找
names_list = ["白眉鹰王", "金毛狮王", "紫衫龙王", "青翼蝠王", "金毛狮王"]
find_name = "金毛狮王"# 使用list.index()查找
# res_index = names_list.index(find_name)
# print(res_index)# 使用顺序查找方法
def seq_search(my_list, find_val):#find_index = -1 # 只有一个结果find_index = [] # 不止一个结果for i in range(len(my_list)):if my_list[i] == find_val:# print(f"恭喜找到{find_val}")# find_index = ifind_index.append(i)# break# else: #未执行到break,进入else# print(f"没有找到对应值{find_val}")return find_indexres_index = seq_search(names_list, find_name)
print(res_index)
二分查找
二分查找的前提是列表已排序,升序还是降序影响二分查找的代码逻辑,如从小到大的序列
1 找到列表的中间数mid_val 和 find_val比较
2 如果 mid_val > find_val,则到左边查找,否则右边查找,相等返回下标
3 循环1-2
4 如果while结束还没有找到,说明列表无该值
num_list = [1, 8, 10, 89, 1000, 1234]
def binary_search(my_list, find_val):left_index = 0right_index = len(my_list) - 1find_index = -1while left_index <= right_index:mid_index = (left_index + right_index) // 2mid_value = my_list[mid_index]if mid_value > find_val:right_index = mid_index - 1elif mid_value < find_val:left_index = mid_index + 1else:find_index = mid_indexbreakreturn find_indexres = binary_search(num_list, 1)
if res == -1:print("列表中无该值")
else:print(f"查找到该值下标为{res}")
断点调试
断点调试的控制按钮
F7
Step into:跳入方法/函数内
F8
Step over:跳过方法函数,逐行执行代码
shift+F8
Step out:跳出方法/函数
F9
resume:执行到下一个断点
模块和包
模块
介绍:Python把各种定义(函数、类、变量、可执行代码等)存入一个文件,在脚本或解释器的交互式实例中使用,这个.py文件即模块。
模块导入
import写在文件头
基本语法:
[from 模块名] import (函数 | 类 | 变量 | *) [as 别名] #[]可选import 模块1[, 模块2...] # 导入一个或多个模块,建议一行导入一个
模块.函数|类|变量 # 使用 .表层级关系from 模块 import 函数|类|变量 # 导入模块的指定功能
函数|类|变量 # 直接使用from 模块 import * # 导入模块的全部功能 ctrl+B查看模块全部功能
函数|类|变量 # 直接使用import 模块 as 别名 # 给导入的模块取别名
别名.函数|类|变量
from 模块 import 函数|类|变量... as 别名 # 给导入的功能取别名
别名 # 直接使用别名
自定义模块
执行可执行文件,若其中有导入模块,导入模块会执行模块文件中的可执行代码。
# module1.py
def hi():print("hi")
hi()# test.py
from module import *
hi()
"""
hi
hi
"""
当一个python模块或包被导入时,__name__
会被设为模块的名称,通常是python文件名去掉后缀;如果模块是在最高层级代码/主程序中执行的,则它的__name__
会被设为字符串__main__
# module1.py
def hi():print("hi")
hi()
print("module.py:", __name__)# test.py
from module import *
hi()
print("test.py:", __name__)
"""
hi
module1.py: module1
hi
test.py: __main__
"""
__name__
使用__name__
可以避免模块中测试代码的执行。因为执行导入模块时,模块文件的__name__
是模块名不等于__main__
,所以不会执行模块文件中的可执行代码块;单独执行模块文件时__name__
等于__main__
,可以继续执行代码。
# module1.py
def hi():print("hi")
if __name__ == "__main__":hi()# test.py
from module import *
hi()
"""
hi
"""
__all__
使用__all__
可以控制 import * 时,那些功能被导入,其中 import 模块 方式不受该限制。
# module1.py
__all__ = ['hi'] # __all__ = ['hi', 'ok']
def hi():print("hi")
def ok():print("ok")
if __name__ == "__main__":hi()# test.py
from module1 import * # 只能导入hi函数
# import module1 #可以导入所有功能
hi()
"""
hi
"""
包package
从结构上看,包就是一个文件夹,该文件夹下包含了一个__init__.py
文件,该文件可用于包含多个模块文件;从逻辑上看,包可以视为模块集合。
- 包可以有多个层级,通过
.
确定层级关系。 - 快捷键
alt+enter
选择解决方案,shift+alt+enter
直接导入
import 包名.模块 # 导入
包名.模块.功能 # 使用from 包名 import 模块 #导入
模块.功能 #使用from 包名.模块 import 函数|类|变量|* #导入
功能 #直接使用
__init__.py
通过__all__
控制包的允许导入的模块
# __init__.py
__all__ = [允许导入的模块列表] # 对from 包 import * 生效;对import xxx不生效
第三方库
常见的第三方库:网络爬、自动化、数据分析及可视化、web开发、机器学习、其他常用(如OpenCV图像和视频工作库)。(库中有框架、文件)
pip
安装
pip
是Python的包管理器工具,允许安装和管理第三方库和依赖
1 进入到命令行控制台
2 语法:pip install 库名/包名
pip install package_name #安装
pip uninstall package_name #卸载
pip list #显示已安装列表
问题:如果执行pip命令出现
`pip` 不是内部或外部命令,也不是可运行程序
1 检查系统环境命令,是否在python3.xx/Scripts文件夹下是否有pythonx.xx\Scrips和pythonx.xx的路径,若没有则添加并应用确认
2 检查pythonx.xx\Scrips路径下是否有pip.exe文件,若没有则打开命令行窗口,执行python -m ensurepip
pip源
默认pip源
国内知名源地址:
豆瓣 https://pypi.douban.com.simple
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple
阿里云 https://mirrors.aliyun.com/pypi/simple
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple
pip install -i 指定源地址 库名/包名
通过pycharm安装:Settings > Python Interpreter > + > Option[-i 指定镜像源地址]