Python记录
1.冒泡排序
时间复杂度O(n^2) 选择、插入都是
def bubble(data, reverse):
for i in range(len(data)-1):
for j in range(len(data)-i-1):
if data[j] > data[j+1]:
data[j], data[j+1] = data[j+1], data[j]
if reverse:
data.reverse()
return data
2.快速排序
时间复杂度O(nlogn)
思路先选择一个pivot,然后左右两个指针,不断向中间比较,如果碰到不符合的就交换,直到两个指针位置相等,然后返回相等位置作为分割点,之后利用递归不断进行排序。
#快速排序
def parition(arr, low, high):
pivot = arr[low]
while low < high:
while low < high and arr[high] >= pivot:
high -= 1
arr[low], arr[high] = arr[high], arr[low]
while low < high and arr[low] <= pivot:
low+=1
arr[low], arr[high] = arr[high], arr[low]
return low
def quick_sort(arr, low, high):
if low < high:
pivot = parition(arr, low, high)
quick_sort(arr, low, pivot-1)
quick_sort(arr, pivot+1, high)
return arr
list = [8, 5, 1, 3, 2, 10, 11, 4, 12, 20]
arr = quick_sort(list, 0, len(list)-1)
print(arr)
3.requests介绍,发起HTTP请求的 强大类库,调用简单,功能强大。
requests
是一个用于发送 HTTP 请求的 Python 库,被广泛用于网络请求、数据抓取、API 调用等任务。它以简单、直观的方式让开发者能够方便地进行各种类型的 HTTP 请求(如 GET、POST、PUT、DELETE 等),并处理服务器返回的响应数据。
3. 读取键盘输入
def forinput():
input_text = input()
4.enumerate
内置函数,用于将一个可遍历的数据对象(如列表,元组,或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环中;
for counter, value in enumerate(some_list):
print(counter, value)
5.正则表达式 re模块
正则表达式(Regular Expression,简称 regex)是一种用于模式匹配和文本处理的强大工具。在 Python 中,通过 re
模块使用正则表达式,可以进行字符串查找、匹配、替换等操作。以下是正则表达式中常用符号和它们的具体用法:
cat log.txt | sort | uniq -c | sort -nr | head -n 5
cat log.txt
将文件内容输出到管道。sort
排序,为uniq
统计相同行做准备。uniq -c
统计每行出现次数。sort -nr
按次数排序,从多到少。head -n 5
显示前 5 行结果。
6.字典转json字符串
dict1 = {'name': '萝卜', 'age': 18}
dict1_new = json.dumps(dict1)
print(dict1_new)
{"name": "\u841d\u535c", "age": 18}
{"name": "\u841d\u535c", "age": 18}
是字典转换后的 JSON 字符串。\u841d
和\u535c
是萝卜
这个字符串的 Unicode 转义表示。它们对应的汉字是萝
和卜
,在 JSON 格式中,汉字会被转换为 Unicode 转义序列以确保兼容性。-
总结
- 这段代码的作用是将一个 Python 字典转换为 JSON 字符串,以便于数据交换、存储等。
- 输出的字符串可以被解析回 Python 字典,也可以被其他编程语言理解,因为 JSON 是一种通用的数据格式。
7.继承
一个类继承自另一个类,可以说是一个子类、派生类,继承自父类、基类
同时获得所有的类成员。继承是我们可以重用代码,还可以更好创建和维护代码;
python支持的继承:
- 单继承:一个子类类继承自单个基类
- 多重继承:一个子类继承自多个基类
- 多级继承:一个子类继承自一个基类,而基类继承自另一个基类
- 分层继承:多个子类继承自同一个基类
- 混合继承:两种或两种以上继承类型的组合
8.tuple和list转换
>>> tuple1 = (1, 2, 3, 4)
>>> list1 = list(tuple1)
>>> print(list1)
>>> tuple2 = tuple(list1)
>>> print(tuple2)
9.Python 的断言就是检测一个条件,如果条件为真,它什么都不做;反之它触发一个带可选错误信息的 AssertionError
。
10.异步非阻塞
同步异步指的是调用者和被调度用者关系
所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用不会返回,一旦调用返回就得到了结果;
异步和同步相对,调用发出之后就直接返回了,所以没有返回结果,当该异步功能完成后,被调用者可以通过状态、通知或回调来通知调用者;
阻塞非阻塞是线程或进程之间的关系。
阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作)。调用线程只有在得到结果之后才会返回。函数只有在得到结果之后才会将阻塞的线程激活
非阻塞和阻塞的概念相对应,非阻塞调用指在不能立刻得到结果之前也会立刻返回,同时该函数不会阻塞当前线程
总结
- 同步 vs 异步:同步等待任务完成才继续,异步不等待任务完成就继续。
- 阻塞 vs 非阻塞:阻塞会暂停线程等待任务完成,非阻塞不会暂停线程,会继续执行。
11.删除操作系统上的文件
>>> f = open('test.txt', 'w') # f 文件对象
>>> f.close()
>>> os.listdir() # 当前目录下文件
['.idea',
'test.txt',
'__pycache__']
>>> os.remove('test.txt')
>>> os.listdir()
['.idea',
'__pycache__']
12.简述logging模块
python内置标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;相比print,具备如下优点:
- 可以通过设置不同的日志等级,在 release 版本中只输出重要信息,而不必显示大量的调试信息
- print 将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging 则可以由开发者决定将信息输出到什么地方,以及怎么输出。
13.字符串字符出现个数
>>> from collections import Counter
>>> str1 = "nihsasehndciswemeotpxc"
>>> print(Counter(str1))
Counter({'s': 3, 'e': 3, 'n': 2, 'i': 2, 'h': 2, 'c': 2, 'a': 1, 'd': 1, 'w': 1, 'm': 1, 'o': 1, 't': 1, 'p': 1, 'x': 1})
14. re.compile
import re
# 编译正则表达式,匹配数字
pattern = re.compile(r'\d+')
# 使用编译后的正则表达式对象进行查找
text = "The numbers are 123, 456, and 789."
matches = pattern.findall(text)
print(matches) # 输出 ['123', '456', '789']
re.compile()
将正则表达式编译成对象,便于高效、可读地执行多次匹配操作。- 编译后的对象包含丰富的方法,可以灵活地进行各种正则操作,提高代码的性能和组织性。
15. 捕获异常
16.反转列表,一道题目leetcode,不使用额外空间
import datetime
def dayofyear():
year = input("请输入年份: ")
month = input("请输入月份: ")
day = input("请输入天: ")
date1 = datetime.date(year=int(year), month=int(month), day=int(day))
date2 = datetime.date(year=int(year), month=1, day=1)
return (date1 - date2).days + 1>>> dayofyear()
请输入年份: >? 2022
请输入月份: >? 5
请输入天: >? 23
143