Python记录

1.冒泡排序

时间复杂度O(n^2) 选择、插入都是

python 复制代码
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(nlog⁡n)

思路先选择一个pivot,然后左右两个指针,不断向中间比较,如果碰到不符合的就交换,直到两个指针位置相等,然后返回相等位置作为分割点,之后利用递归不断进行排序。

python 复制代码
#快速排序
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 等),并处理服务器返回的响应数据。

  1. 读取键盘输入
python 复制代码
def forinput():
       input_text = input()

4.enumerate

内置函数,用于将一个可遍历的数据对象(如列表,元组,或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环中;

python 复制代码
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字符串

python 复制代码
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转换

python 复制代码
>>> tuple1 = (1, 2, 3, 4)
>>> list1 = list(tuple1)
>>> print(list1)
>>> tuple2 = tuple(list1)
>>> print(tuple2)

9.Python 的断言就是检测一个条件,如果条件为真,它什么都不做;反之它触发一个带可选错误信息的 AssertionError

10.异步非阻塞

同步异步指的是调用者和被调度用者关系

所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用不会返回,一旦调用返回就得到了结果;

异步和同步相对,调用发出之后就直接返回了,所以没有返回结果,当该异步功能完成后,被调用者可以通过状态、通知或回调来通知调用者;

阻塞非阻塞是线程或进程之间的关系。

阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作)。调用线程只有在得到结果之后才会返回。函数只有在得到结果之后才会将阻塞的线程激活

非阻塞和阻塞的概念相对应,非阻塞调用指在不能立刻得到结果之前也会立刻返回,同时该函数不会阻塞当前线程

总结

  • 同步 vs 异步:同步等待任务完成才继续,异步不等待任务完成就继续。
  • 阻塞 vs 非阻塞:阻塞会暂停线程等待任务完成,非阻塞不会暂停线程,会继续执行。

11.删除操作系统上的文件

python 复制代码
>>> 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.字符串字符出现个数

python 复制代码
>>> 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})
  1. re.compile
python 复制代码
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() 将正则表达式编译成对象,便于高效、可读地执行多次匹配操作。
  • 编译后的对象包含丰富的方法,可以灵活地进行各种正则操作,提高代码的性能和组织性。
  1. 捕获异常

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

相关推荐
神奇夜光杯1 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
千天夜13 分钟前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼16 分钟前
Python 大数据展示屏实例
大数据·开发语言·python
小码农<^_^>18 分钟前
优选算法精品课--滑动窗口算法(一)
算法
羊小猪~~20 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
软工菜鸡1 小时前
预训练语言模型BERT——PaddleNLP中的预训练模型
大数据·人工智能·深度学习·算法·语言模型·自然语言处理·bert
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
放飞自我的Coder1 小时前
【python ROUGE BLEU jiaba.cut NLP常用的指标计算】
python·自然语言处理·bleu·rouge·jieba分词
AI视觉网奇1 小时前
sklearn 安装使用笔记
人工智能·算法·sklearn
正义的彬彬侠1 小时前
【scikit-learn 1.2版本后】sklearn.datasets中load_boston报错 使用 fetch_openml 函数来加载波士顿房价
python·机器学习·sklearn