第10章 内置模块

sys Python解释器

模块下常用的函数 作用
exit() 引发SystemExit异常来退出程序
getfilesystemencoding() 返回当前系统中保存文件所用的字符集
getswitchinterval() 返回线程切换的时间间隔
setswitchinterval() 设置线程切换的时间间隔
modules 返回模块名和载入模块对应关系的字典
path 指定查找模块的路径列表,修改此属性可以动态增加路径
>>> import sys
>>> sys.getfilesystemencoding()
'utf-8'
>>> sys.getswitchinterval()
0.005
>>> sys.modules
【Squeezed text(145 lines).】
>>> sys.path
['D:\\Python 3.7.2\\Lib\\idlelib', 'D:\\Python 3.7.2\\python37.zip', 'D:\\Python 3.7.2\\DLLs', 'D:\\Python 3.7.2\\lib', 'D:\\Python 3.7.2', 'D:\\Python 3.7.2\\lib\\site-packages']

# OS模块 操作系统

模块下常用的函数 作用
cup_count() 返回当前系统的CPU数量
startfile(path,[operation]) 用文件关联的工具操作文件
operation默认是open,也可以设置成edit, print
system(command) 运行操作系统上的指定命令,如:os.system(‘cmd’)

# random 生成伪随机数

分类 模块下常用的函数 随机生成
区间 random() 在0.0~1.0之间,一个浮点数
uniform(a,b) 一个数
randint(a, b) 一个整数
randrange(start, stop, [step]) 指定步长,一个整数
序列 shuffle(seq, [random]) 将序列随机重排
choice(seq) 随机抽取1个元素
sample(seq, k) 从序列中抽取k个元素
choices(seq, weight, k) 从序列中抽取k个元素,可设置各元素权重
>>> a = [1,2,3]
>>> random.shuffle(a)
>>> print(a)
[2, 3, 1]

>>> random.choices([1,2,3],[5,5,10],k=1)
[3]

# time 日期、时间与字符串的互相转换

时间元组

struct_time():由9个元素组成的元组,代表时间

tm_year tm_mon tm_mday tm_hour tm_min tm_sec tm_wday tm_yday tm_isdst
周中天 年中天 令时
2020等 1~12 1~31 0~23 0~59 0~59 0~6 1~366 0/1/-1
(1970,1,1,0,0,0,3,1,0)  #简写
(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)  #完整形式

秒数、字符串、时间元组及其相互转化

原始数据是秒,三种数据可互相转化。除gmtime(),【sec】与【t】缺省时,默认为本地时间

模块下的函数 作用 结果类型
time() 过去的秒数(1970年1月1日0点至今) float
ctime([sec]) 秒转字符串 str
localtime([sec]) 秒转时间元组(本地时间) 时间元组
gmtime([sec]) 秒转时间元组(标准时间) 时间元组
mktime(t) 时间元组转秒 float
asctime([t]) 时间元组转字符串,默认格式 str
strftime(format, [t]) 时间元组转字符串,指定格式 str
strptime(string, [format]) 字符串转时间元组,可指定格式 时间元组

format 时间格式(% + 字母)

常用分隔符:年、月、日、时、分、秒、星期、空格、【:】【-】【/】

名字 星期-完整 星期-缩写 月份-完整 月份-缩写 时区
字母 A a B b Z
日期 年-完整 年-简写 年中日 月中日 周中日
字母 Y y m j d w
取值范围 0000~9999 00~99 1~12 001~366 01~31 0~6
排序 年中周(日) 年中周(一)
字母 U W
取值范围 00~53 00~53
时间 24小时制 12小时制 分钟
字母 H I M
取值范围 00~23 00~12 00~59
本地化的 日期 时间 日期 + 时间 上午/下午 时区偏移
字母 x X c p z
>>> time.strftime('%c')
'Wed Jun 17 00:24:00 2020'

更多时间函数

模块下的函数 作用
timezone 返回本地时区的时间偏移(秒)
tzname 本地时区的名字
process_time() 返回当前进程使用CPU的时间
sleep(secs) 暂停若干秒

# JSON支持

实现JSON字符串与Python对象的相互转换(略)

# re 正则表达式

另起一文

# 容器相关类

set 集合

特点:不接受重复元素;不记录元素添加的顺序;内部元素可改变

frozenset:元素不可改变的set。作用:字典的key不可变,不能用set,可以用frozenset

基本操作

操作 创建 添加元素 删除元素 清空
方法 a = {} a = set() add remove discard clear
  1. 删除不存在的元素时,remove会报错,discard不报错
  2. 大括号中没有内容时,默认创建空字典,只用逗号分隔各元素时,默认创建set
  3. 判断元素是否存在:【元素 in set名】
a = {}
print(type(a))  #<class 'dict'>
a = {1,2}
print(type(a))  #<class 'set'>

a = set([1,2])
print(a) #{1, 2}
if 1 in a: print('是')  #是

set的关系 - 包含与被包含

a是b的父集合 a包含b a.issuperset(b) a >= b
a是b的子集合 b包含a a.issubset(b) a <= b
a = {1,2}
b = {1}
a.issuperset(b)  #True
a >= b           #True
b.issubset(a)    #True
b <= a           #True

set的运算

运算 符号 不改变a 将运算结果赋值给a
并集 a.union(b) a.update(b)
交集 a & b a.intersection(b) a.intersection_update(b)
相减 a - b a.difference(b) a.difference_update(b)
异或 a ^ b
  • 异或:并集 - 交集

deque 双端队列

基本操作

操作 增加 弹出 增加
右边(默认) append pop extend
左边 appendleft popleft extendleft
from collections import deque
a = deque((1,2))
a.appendleft(3)
print(a)  #deque([3, 1, 2])
a.pop()   #2
print(a)  #deque([3, 1])
a.extend(range(4,6))
print(a)  #deque([3, 1, 4, 5])

作为栈使用:append + pop

作为队列使用:append + popleft

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qbuktums-1639817346745)(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABBcAAAFACAYAAADnD5TZAAAgAElEQVR4AeydCZgU1dX+z8z0dM+wySYCoiAggg6yCAgugIgYEQNRUQyucU2iRhM1fv9oop/mSb4QozEmMe5G3DXBBBURFxRldWFfZFXZtxEYZnqmp/v/vHe8bXVNVXX1Ol3d732eoburbt3ld4vuuu8959yiSCQSESYSIAESIAESIAESIAESIAESIAESIAESSJJAcZLX8TISIAESIAESIAESIAESIAESIAESIAESUAQoLvBGIAESIAESIAESIAESIAESIAESIAESSIkAxYWU8PFiEiABEiABEiABEiABEiABEiABEiABigu8B0iABEiABEiABEiABEiABEiABEiABFIiQHEhJXy8mARIgARIgARIgARIgARIgARIgARIgOIC7wESIAESIAESIAESIAESIAESIAESIIGUCFBcSAkfLyYBEiABEiABEiABEiABEiABEiABEqC4wHuABEiABEiABEiABEiABEiABEiABEggJQK+lK7mxVI982WpW7pASvsOkfIxE0mEBEiABEiABEiABEiABEiABEiABAqOAMUFjww5BAwIGUgQMSBmpCsFP54ptSsXS/OJV0lxqzbpKpblkAAJkAAJkAAJkAAJkAAJkAAJFAgBz4kLVc8+KPXbvkrr8LT6xZSY8owT+ZgTDh9wDf7cJKf6zOfclGfMs+++W9XHRASI0IZVEqncIVUvP0aBwQiT70mABEiABEiABEiABEiABEiABFwRYMwFV5jyO1PzyTeKr8exUYEhv3vL3pEACZAACZAACZAACZAACZAACaSbgOcsFzARznSCy4Fbt4N8iblQNmqCVO3epQQG9InxIzJ9l7F8EiABEiABEiABEiABEiABEsgfAp4TF7KJPhEXDDduEYm4KmSzn6gLsRaanXWBHHz5sYYAld2PFV/P47LdDNZHAiRAAiRAAiRAAiRAAiRAAiTgQQJ0i/DgoGWqySWdu4qvz/Gq+OD8dzJVDcslARIgARIgARIgARIgARIgARLIMwK0XHAYUDcuGPniFqExlLTtIHUiKmgmrDHcuofo6/lKAiRAAiRAAiRAAiRAAiRAAiRQeAQoLpjGHBNqveWj6ZTjRzduEcYCUt0VwlhWOt+Hvl4fLS44dwbFhSgNviEBEiABEiABEiABEiAB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27ZtrsphJhIgARIgARIgARIgARIgARIgARLINoGiSCQSyVSlRUVFqugMVpGppiddLiwWICzo1KpVK9m+fbuyQtDHzK9//OMf5fbbb5fWrVvL7t27zaelbdu20q5dO/nggw8StoRoVFiOHyjEeybHhySrzWPMhaziZmUkQAIkQAIkQAIkQAI5ToAxF3J8gDLZvKlTpyohobS0VFVTXV0tM2bMcKwSwkJxcbESFvDau3dvGT58uBx22GHquj179sjOnTuVZYNjQTxJAiRAAiRAAiRAAiRAAiRAAiRAAk1AgG4RaYb+2GOPCeIm1NXVid/vV6+PPvqoYy2wbgiFQvL9739fqqqqZOXKlTJ79mzlCvE///M/gtV8xGCYNWuWwDKCiQRIgARIgARIgARIgARIgARIgARyiQDdItI4GvPmzVNxElBkjx49ZN26dap0WCPANaJ9+/aWtc2cOVMCgYCMGDGi0XmIDrBggPVC8+bNBeLFpEmTGuXLlwN0i8iXkUyuH3SLSI4bryIBEiABEiABEiABEshPAnSLyM9xjdurZ599VsrLy5XFwvXXXx8VC7DbA9wl7NKYMWOiec15cG3Xrl3VYVhCwCqCiQRIgARIgARIoLAJzJ071zUA5H3ggQfklVdecX0NM3qPwNKlS9VilJuWwxIW9wT+mEiABEggXQToFpEmkrAweOaZZwQxFmpra+X888+Xyy+/XFkk4PMTTzyRdE07duxQ10JYaNGiRdLl8EISIAESIIHCIKAnDk09mcy1SW0iXMAOE690uyOiPFgsppLQrjPPPNN1OfPnz5df//rXgkWQRBMsJzFpjZecJqqZYhmvTW7Pu21fIvePm7rx/wPPh274xisPZZ188sny0EMPxcuqzm/dulXdE7gvMpU0r0z8P8pUm1kuCZBAagR8qV3OqzWB6dOny4EDB9RHuDd06dJFCQzXXnutOoYfjmXLlklFRYW+xNXr119/LZs3b1Z5IVwker2rSpiJBEiABEggJwng4XzatGmObZswYYJ069YtJo+eOJx++unqtyjmpMUHN/VYXKYO6d87q/N6Uuu2HVZlpPNYIlwwEX/nnXfkxBNPbMQ3lTY9+OCDysURTP79738nVRTahITtrgcNGqR2lXJTEHalSiRBWMDW2EjvvfeeYz16knrTTTc1qiJTLBtVlOQBt+1L5P5x0xTj/49k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ARIgARIgARIgARIgARJIkQDFhRQB8nISIAESIAESIAESIAESIAESIAESKHQCFBcK/Q5g/0mABEiABEiABEiABEiABEiABEggRQIUF1IEyMtJgARIgARIgARIgARIgARIgARIoNAJUFwo9DuA/ScBEiABEiABEiABEiABEiABEiCBFAlQXEgRIC8nARIgARIgARIgARIgARIgARIggUInQHEhA3dATU2NvP/++zJv3rykS0cZc+bMkVWrViVdBi8kARIgARIgARIgARIgARIgARIggWwQoLiQAcojR46U0047TYYNGyY333xzwjVAlOjXr5+ceuqp0qdPH5k+fXrCZfACEiABEiABEiABEiABEiABEiABEsgWAYoLaSa9du1amT9/frTURx99VGCF4CZVVlbK1VdfLSeffLKsWbNGXVJeXi67du1ycznzkAAJkAAJkAAJkAAJkAAJkAAJkECTEKC4kGbsTz/9tEAQKC0tVSWHQiGZNm1a3FpeeeUV6d69uzzxxBMSDoeluJhDExcaM5AACZAACZAACZAACZAACZAACeQEAc5g0zwMTz31lFRXV0tdXZ34fD4JBoMC6wWnNGPGDLngggtk79690rx5c+nYsaO0a9fO6RKeIwESIAESIAESIAESIAESIAESIIGcIUBxIY1DgQCMW7ZsUSX26tVLIpGIeo/gjtu2bbOtCa4URUVFUlJSItdee6188cUX0qVLF9v8PEECJEACJEACJEACJEACJEACJEACuUSA4kIaRwMuEYFAQPx+v9xwww1y5plnqtLhIjF16lTbmiZNmiR33nmnfP755zJlyhRp0aKFbV6eIAESIAESIAESIAESIAESIAESIIFcI0BxIU0jgqCNL7zwgnKJqK+vFwgGV1xxhbJGiOca0b59e7nrrrukoqIiTa1hMSRAAiRAAiRAAiRAAiRAAiRAAiSQPQIUF9LEGttFQkRAOuWUUwSCwbhx46KBHbH7AywTmEiABEiABEiABEiABEiABEiABEgg3whQXEjTiD755JMqbgLcIi6//HJVallZmVx88cVKYMAOEnCbYCIBEiABEiABEiABEiABEiABEiCBfCNAcSENI7pr1y556623pLa2Vm0jef7550dLnTx5ssBNAjtIYJtJbE3JRAIkQAIkQAIkQAIkQAIkQAIkQAL5RIDiQhpGE7EWELQRgRzPPvvsmICMI0eOlEMPPVTVUlVVJXCfYCIBEiABEiABEiABEiABEiABEiCBfCJAcSENo/n4448LAjpi60lYKpgTAjs2a9ZMWTDAeoGJBEiABEiABEiABEiABEiABEiABPKJgC+fOtMUfVm7dm00UGNdXZ1MnDjRsRkzZswQuFEg4CMTCZAACZAACZAACZAACZAACZAACeQDAVoupDiKCNKIII5uU3Fxsdqy0m1+5iMBEiABEiABEiABEiABEiABEiCBXCdAy4UURwhuDtiCEqJBly5dxOezRnrw4EHZu3evygs3iuuvvz7Fmnk5CZAACZAACZAACZAACZAACZAACeQGAeuZcG60LedbMWfOHNm2bZtqJ4I2btq0ybbNcIXo2LGjOv/555/LqlWrpHfv3rb5eYIESIAESIAESIAESIAESIAESIAEvEKAbhEpjBRcIkpKSuSQQw6Riy66yLEkxFg444wzlAsF3ChwLRMJkAAJkAAJkAAJkAAJkAAJkAAJ5AOBogi2OMhQKioqUiVnsIoMtTx+sdgdol27dgJ3B7hEzJ49W0455RTHC6dOnSrXXnutugaWDjt27FD5UdbYsWNjLB82b96sXCjgZtGmTRtp2bKlytupUyd55ZVXolYQjhV68GQ+3zMeHA42mQRIgARIgARIgARIgARIgARcEaDlgitMjTNNmzZNamtr1YkOHTrEFRaQccKECdGCdu7cKbNmzVKfURbEifXr10f/EMcBKRQKCfLqc/PmzROIFEwkQAIkQAIkQAIkQAIkQAIkQAIkkCsEKC4kORKVlZVq4o/Lf/azn7kqpUWLFnLppZdG80I4QKqoqBC/3x89Hu/N0KFD42XheRIgARIgARIgARIgARIgARIgARLIGgG6RaSAWgdz1IEa3Ra1ceNGgdCAOAxMsQToFhHLg59IgARIgARIgARIgARIgARIwAsEKC54YZQKqI0UFwposNlVEiABEiABEiABEiABEiCBvCFAt4i8GUp2hARIgARIgARIgARIgARIgARIgASahgDFhabhzlpJgARIgARIgARIgARIgARIgARIIG8IUFzIm6FkR0iABEiABEiABEiABEiABEiABEigaQhQXGga7qyVBEiABEiABEiABEiABEiABEiABPKGAMWFvBlKdoQESIAESIAESIAESIAESIAESIAEmoYAxYWm4c5aSYAESIAESIAESIAESIAESIAESCBvCFBcyJuhZEdIgARIgARIgARIgARIgARIgARIoGkIUFxoGu6slQRIgARIgARIgARIgARIgARIgATyhgDFhbwZSnaEBEiABEiABEiABEiABEiABEiABJqGAMWFpuHOWkmABEiABEiABEiABEiABEiABEggbwhQXMiboWRHSIAESIAESIAESIAESIAESIAESKBpCFBcaBrurJUESIAESIAESIAESIAESIAESIAE8oYAxYW8GUp2hARIgARIgARIgARIgARIgARIgASahgDFhabhzlpJgARIgARIgARIgARIgARIgARIIG8I+LLRk6KiomxUwzpIgAQ8ToDfFR4fQDafBEiABEiABEiABEggZQKRSCTlMpqiAFouNAV11kkCJEACJEACJEACJEACJEACJEACeUQgK5YLXlVe8micPdMVrlx7Zqgy0lB+V2QEa14Xqr8zeO/k9TCntXO8Z9KKs2AK431TMEOd1o7yvkkrThbmAQK0XPDAILGJJEACJEACJEACJEACJEACJEACJJDLBCgu5PLosG0kQAIkQAIkQAIkQAIkQAIkQAIk4AECFBc8MEhsIgmQAAmQAAmQAAmQAAmQAAmQAAnkMgGKC7k8OmwbCZAACZAACZAACZAACZAACZAACXiAAMUFDwwSm0gCJEACJEACJEACJEACJEACJEACuUyA4kIujw7bRgIkQAIkQAIkQAIkQAIkQAIkQAIeIEBxwQODxCaSAAmQAAmQAAmQAAmQAAmQAAmQQC4ToLiQy6PDtpEACZAACZAACZAACZAACZAACZCABwhQXPDAILGJJEACJEACJEACJEACJEACJEACJJDLBCgu5PLosG0kQAIkQAIkQAIkQAIkQAIkQAIk4AECFBc8MEhsIgmQAAmQAAmQAAmQAAmQAAmQAAnkMgFfLjeObSMBEiABM4G6pQukeubLUtLxCGk++UbzaX4mARIgARIgARIgARIgAUcCfJ50xJP0SYoLSaOzv7CmpkbmzZsnZWVlMnToUPuMNmeWLVsmn3/+uYRCIenWrZsMGjRIWrRoYZObh0mABDJBQP/ooOzyMROltO+QtFUTWrtcat59VcpGnSe+nselrVwWVDgEKisrZdasWeLz+WT06NEJ/Ubo36iNGzcqYK1bt1a/M126dCkcgAXa07Vr16rnE4z1yJEj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NyzQXqZCxB4aneTNx39is81bzwVhG7aZHMCexZ3U12lMwARMwARMwARM4PlrfrRhoIqdDTIeqWWU8Pb8y7P/Vbzy6AOtznAcF12QnSFYq4swbvpkaNPtN7Q8YOs8H2I2ZecYEeZ+6LNhqm3QkxnYe2ntJM+PsrRNrttzoQklxxkYAVt4B4a6tiBZSjfZbZ+uO8Z1hdEZZz2BXFmxp4LywWqLAaPKyho6+Df/opjYYvMpngvKpxdHPAo0fSL2XJDnxyZvP7inhg25+s15y3+z5wJeLmM+/a4X76jzmEzA78xkHv7VjIDfm2acHGsyAb836zwXMDDM+qttsh6pk4l192uU9UlaLs/a2HOBNsFvo7fu1lN9XHryqy+/OGUKczdPwcaFbug5bc8J+CPcc6TO0ATGmoC/GWP9ePvSOL8zfcE69pn6vRn7R9yXBvq96QtWZzrEBLxbxBA/HFfNBEzABEzABEzABEzABEzABEzABEaBgI0Lo/CUXEcTMAETMAETMAETMAETMAETMAETGGICNi4M8cNx1UzABEzABEzABEzABEzABEzABExgFAjYuDAKT8l1NAETMAETMAETMAETMAETMAETMIEhJmDjwhA/HFfNBEzABEzABEzABEzABEzABEzABEaBgI0Lo/CUXEcTMAETMAETMAETMAETMAETMAETGGICNi4M8cNx1UzABEzABEzABEzABEzABEzABExgFAjYuDAKT8l1NAETMAETMAETMAETMAETMAETMIEhJmDjwhA/HFfNBEzABEzABEzABEzABEzABEzABEaBgI0Lo/CUXEcTMAETMAETMAETMAETMAETMAETGGICNi4M8cNx1UzABEzABEzABEzABEzABEzABExgFAhMvPrqq6/2q6ITExP9ytr5jjmBPr6WY05utJvnb8ZoPz/X3gRMwARMwARMwARMoHsCo9oX6qvnwqhC6f51cA7dEPB70w09pzUBEzABEzABEzABEzABEzCBwRPoq+fC4JvjEk3ABEzABEzABEzABEzABEzABEzABAZNoK+eC4NujMszARMwARMwARMwARMwARMwARMwARMYPAEbFwbP3CWagAmYgAmYgAmYgAmYgAmYgAmYwFgRsHFhrB6nG2MCJmACJmACJmACJmACJmACJmACgydg48LgmbtEEzABEzABEzABEzABEzABEzABExgrAjYujNXjdGNMwARMwARMwARMwARMwARMwARMYPAEbFwYPHOXaAImYAImYAImYAImYAImYAImYAJjRcDGhbF6nG6MCZiACZiACZiACZiACZiACZiACQyegI0Lg2fuEk3ABEzABEzABEzABEzABEzABExgrAjYuDBWj9ONMQETMAETMAETMAETMAETMAETMIHBE7BxYfDMXaIJmIAJmIAJmIAJmIAJmIAJmIAJjBUBGxfG6nG6MSZgAiZgAiZgAiZgAiZgAiZgAiYweAI2LgyeuUs0ARMwARMwARMwARMwARMwARMwgbEiYOPCWD1ON8YETMAETMAETMAETMAETMAETMAEBk/AxoXBM3eJJmACJmACJmACJmACJmACJmACJjBWBGxcGKvH6caYgAmYgAmYgAmYgAmYgAmYgAmYwOAJ2LgweOYu0QRMwARMwARMwARMwARMwARMwATGioCNC2P1ON0YEzABEzABEzABEzABEzABEzABExg8ARsXBs/cJZqACZiACZiACZiACZiACZiACZjAWBGwcWGsHqcbYwImYAImYAImYAImYAImYAImYAKDJ2DjwuCZu0QTMAETMAETMAETMAETMAETMAETGCsCNi6M1eN0Y0zABEzABEzABEzABEzABEzABExg8ARsXBg8c5doAiZgAiZgAiZgAiZgAiZgAiZgAmNFYM6aNWvGqkFujAnUEZg3b15dFN+fJgL+Hk0TeBdrAiZgAiZgAiZgAiYwlARGqe9iz4WhfIVcKRMwARMwARMwARMwARMwARMwARMYHQI2LozOs3JNTcAETMAETMAETMAETMAETMAETGAoCdi4MJSPxZUyARMwARMwARMwARMwARMwARMwgdEhYOPC6Dwr19QETMAETMAETMAETMAETMAETMAEhpKAjQtD+VhcKRMwARMwARMwARMwARMwARMwARMYHQI2LozOs3JNTcAETMAETMAETMAETMAETMAETGAoCdi4MJSPxZUyARMwARMwARMwARMwARMwARMwgdEhYOPCgJ7Vn/70p+LRRx8dUGkuxgRMwARMwARMwARmHoF77723+NWvflWgdzmYgAmYgAkMlsCcXhbHx5yw7777VmabxpMAeN3rXleZbthvItCeffbZ4oknnigef/zxYvXq1cXTTz9d3HDDDaHqu+++e7Fy5copzaD9dW3HMPHkk08W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)]

更多操作

函数 clear() insert() rotate()
作用 清空 指定位置 将最右边的一个元素移动到最左边
a = deque((1,2))
a.insert(1,'b')
print(a)  #deque([1, 'b', 2])
a.rotate()
print(a)  #deque([2, 1, 'b'])
a.clear()
print(a)  #deque([])

堆操作

小顶堆条件:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fIw9RnOT-1639817346747)(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPgAAAAtCAYAAACDIqaXAAAFEklEQVR4Ae2dDZKsKgyF4623mtHt6HYat6Pb0bsdXgX/e1RQIir3TFVX2zaE5DtEAbUn0Vprwh8IgECUBP5EGRWCAgEQMASQ4OgIIBAxASR4xOIiNBBAgqMPgEDEBJDgEYuL0EAACY4+AAIRE0CCRywuQgMBJDj6AAhETAAJHrG4CA0EkODoAyAQMQEkeMTiIjQQQIKjD4BAxASQ4BGLi9BAAAkeSR+oy5Jah1jaMqOidiiIIlEQ+C+KKBAE/VBNWaIcSSRUVJqq3LE4ir2WAM7gr5VuxfFUUaM18SP+Wy+T1HmF5F7BF+Mu/wRvS8qShJLMbYj4OIhv9z8U0Fg4xRKHo+7+Ce7YEIqBAAiEJ4AED88cLYJAMAJI8GCo0RAIhCfwqgSvixfP9UNo26puPYTXRDZeb7lEBq1lOsx1CV4XfScryPeyqxE7Sbrrtz8/lMrEvm9F0P/9hgS/dV1FF2yShDndojXzEI5DErGPrWsSnGGZU0VKqqno7OXWhdhElFea9HjxtqUy2z5TjWewM6v7Qv77CPOKuoKcbtOaQQvG8TTd5BOcL0OMyd3Q58Tpdik2HyS667pjbl9JUcD/K917jG0hTrdqzTCF4niMLl+OyN7JxrAyRS3lVOnjZ24We5oj2myk9Gk0fb4C8vro6b9X22+qLMDpdq2Zt0AcT5dNLsF5gSfjcG2JuYGkLankyTrPI5tPmHn23BVf/+e2Yt6W4HS31qyPRBwv0FluiJ7mlJvheE1l6fLYwxed9EMfnqwz+DvujPP1/yucWz4O7DZW0HldYhohnfRQgtPdWnPoEnGcRBiymlyCEw+Zu2F5q9aeWKqpSBLKdpLfLKLp/iGIsbNurcJLL7LZ/O+HdPPkWWSLPb4tYbt5aEY7aLaqLvcHWUW3cXLjcK/WjM0WxwV685Rgs/8spZT6JJjg7FJOVaPM8LouznfYhfjUdZgkOW/PHdae/zUVWU15v+CneY2hLnYPWPZ2u9gWxwl7pQeU2ON0zL37tGY/9+KQ1lvaniNn/u+iXn+N0imRplTppjfUqJT/Y6kmynXlZbyrXOVsq3/lEhZnTnn4b/xy8IfLpWqgM7Vt6jM340OqV4pMhS1bhvlMg63irj7/qu/B6ZetnR3Gv6u05nY94nBlx+XW9P4O29Xed70jn4XP4N1RJf00/eOINRXj6akbUu8N0beOSYuj/N+/Tj9ssGXLZf+6/7aax+Mzcd2xoGgLxfH7dU7HOcybC601t70ex9yrtW2/ONcsXrHvkgRnR/OqIcWLbt7D2CnskAlh9b9fCc7zs7fxTHHdttXPCc8cdAefrZyGggffQ2rNrlnjkNZb2t4W3yOne7+yjVap29DFr50QtbtY+Na66W8Z3zRNmU0v+qHnr+HboSF63/YwjJV6X8QyRXV8a8nheP0n1hDWW6/Zuybuy87gWweUGPbzAqJqc6p2bq3jYd/wqypcLFXT5+bM7X0jOF793f7FlqHNw+87sYxN/6Mb0nq72JNCjQQ/SLK7A+vkzTwH20Lx+wlI6y1tz0YICW4jNPs+tDizprF5AwFpvaXtuSBBgrtQ4jLD7ZXjdfnhSTb79XleMFoblvNPGJun3sz9+y2p/um48cKDq28oJ09AWm8Pez7BJTy19zGAuiAAAs8lgDP4c7WBZyDgTQAJ7o0QBkDguQSQ4M/VBp6BgDcBJLg3QhgAgecSQII/Vxt4BgLeBJDg3ghhAASeS+B/LMmAF/EIX0MAAAAASUVORK5CYII=)],i = 0,2,… (n-1)/2,二叉树效果图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f3uyP3oW-1639817346751)(data:image/png;base64,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)]

python中,堆不是数据类型,但是列表是当成堆处理的,列表可以转化成堆

函数 参数 作用
heapify heap 将堆属性应用到列表上
heappop 弹出最小的元素
heappush heap, item 加入元素
heapreplace 先弹出最小元素,后加入新元素
heappushpop 先加入新元素,后弹出最小元素
nlargest n, iterable, key=None 返回最大的n个元素
nsmallest 返回最小的n个元素
merge *iterable, key=None, reverse=False 多个小有序堆合成一个大有序堆
from heapq import *
a = [0,1,2,3,0.5]
print(a)              #[0, 1, 2, 3, 0.5]
heapify(a)
print(a)              #[0, 0.5, 2, 3, 1]
heapreplace(a,-1)     #-1
print(a)              #[-1, 0.5, 2, 3, 1]
heappushpop(a,-2)     #-2
print(a)              #[-1, 0.5, 2, 3, 1]
b = nlargest(3,a)
print(b)              #[3, 2, 1]
c = list(merge(a,b))
print(c)              #[-1, 0.5, 2, 3, 1, 3, 2, 1]

Dict - ChainMap 字典的假合并

key相同时,排名最靠前的字典拥有最高优先级

from collections import ChainMap
a = ChainMap({1:1},{2:2},{3:3})
print(a)     #ChainMap({1: 1}, {2: 2}, {3: 3})
print(a[2])  #2

应用:决定各变量的优先级:
b = ChainMap(locals(), globals())
for i in b: ...

Dict - Counter对象

继承dict类,以key为元素,以key出现的次数为value。转化为set, list时,只保留key

创建counter

创建途径 字典 关键字 可迭代对象
语法 counter() Counter( {1:3} ) Counter(b=2) Counter(iterator)
from collections import Counter
Counter(b=2)       #Counter({'b': 2})
Counter(range(3))  #Counter({0: 1, 1: 1, 2: 1})

Counter运算

功能 语法 备注
相加 a + b 只保留value为正的元素
相减 a - b (a.substract(b)) 只保留value为正的元素
交集 a & b 两者共有的key,其value取最小值
并集 a | b 所有key,其value取最大值
求正 +a 只保留value>=0的元素,并将出现次数改为正数
求负 -a 只保留value<=0的元素,并将出现次数改为正数
a = Counter({1:1,2:2})
b = Counter({2:2,3:3})
c = Counter({1:1,2:-1})

a + b  #Counter({2: 4, 3: 3, 1: 1})
a - b  #Counter({1: 1})
a & b  #Counter({2: 2})
a | b  #Counter({3: 3, 2: 2, 1: 1})
+c  #Counter({1: 1})
-c  #Counter({2: 1})

Counter对象的更多方法

函数 作用
elements() 以迭代器形式,返回所有key
most_common([n]) 返回value最大的n个元素
sum(a.values()) 计算所有元素出现次数的总和
a = Counter({1:1,2:2})
[i for i in a.elements()]  #[1, 2, 2]
a.most_common(1)           #[(2, 2)]
sum(a.values())            #3

Dict - defaultdict对象

dict的子类,区别:访问不存在的key时,不报错,直接把默认的value赋值给key

default_factory 缺省 int str list set
默认值 None 0 ‘’ [] set()
from collections import defaultdict
a = defaultdict(int)
a[1]      #0
print(a)  #defaultdict(<class 'int'>, {1: 0})

也可以用普通字典的【setdefault(key, default=None)】方法逐个赋值,分两种情况:

  1. key存在,直接返回value
  2. key不存在,先赋值,再返回value
a = {1: 'x'}
a.setdefault(1, 'y')  #'x'
a.setdefault(2, 'z')  #'z'
a                     #{1: 'x', 2: 'z'}

Dict - OrderDict

dict的子类。区别:有序的字典

方法 参数 作用
popitem() last=True 默认弹出最右边的元素
move_to_end key, last=True 将指定元素移到最右边,为False时,移到最左边

tuple - namedtuple

tuple类的子类,可以为tuple的每个元素指定字段名,便于后期用字段名访问元素

namedtuple(typename, field_names, verbose=False, rename=False, module=None)

参数 含义
typename 类名(字符串格式)
field_name 字段名组成的序列
verbose=False 不自动打印类定义
rename=False 不自动替换无效字段名为位置名
module=None 将当前类放在某个模块下

字段名格式:字符串,以字母开头,由字母、数字、下划线组成,且逗号或空格分隔。

可用字符串代表所有字段名,每个字符为一个字段名。不可以用内置的关键字,不可重复

from collections import namedtuple
A = namedtuple('B',['x', 'y'])  #创建tuple类,类名为B,字段名为x, y
print(A)  #<class '__main__.B'>
a = A(1,2)  #创建元组,元素的数量与字段名的数量要相等
a[0]  #1    #通过位置访问元素
a.x   #1    #通过字段名访问元素

更多方法

函数 作用
_make(iterable) 类方法,创建对象
_asdict() 转换成OrderedDict 字段名与内容配对的列表
_replace(**kwargs) 通过字段名修改值
_fields 以元组形式,返回所有字段名
A = namedtuple('B',['x', 'y'])
a._make(range(2))  #B(x=0, y=1)
a._asdict()        #OrderedDict([('x', 1), ('y', 2)])
a._replace(y=3)    #B(x=1, y=3)
a._fields          #('x', 'y')

上一篇:Java创建线程安全的方法


下一篇:flutter 文件读写