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重要知识点汇总 -> 正文阅读

[数据结构与算法]Python重要知识点汇总

1. 字符串

1.1. 字符串格式化

字符串有三种格式化方式,分别如下:

  1. 方式一:
    %s 字符串占位,%d 占位整数,%f 占位小数
# 方式1
s = "我叫%s, 我住在%s, 我今年%d岁, 我喜欢%s" % (name, address, age, hobby)
s0 = "我叫%s" % name
print(s0)
  1. 方式二:
s1 = "我叫{}, 我住在{}, 我今年{}岁, 我喜欢{}".format(name, address, age, hobby)
print(s1)
  1. 方式三:
s2 = f"我叫{name},我叫{name},我叫{name},我叫{name},我今年{age}岁,我叫{name},我叫{name}"  # 新的格式化方案:f-string
print(s2)

1.2. 字符串索引和切片

注意:同列表切片

  1. 基本概念
    (1)索引:按照位置提取元素
    (2)切片:从一个字符串中提取一部分内容

  2. 语法
    (1)s[start:end] 从start到end进行切片. 但是取不到end [start, end)
    (2)s[start:end:step] 从start切到end, 每step个元素出来一个元素
    (3)通过步长的符号可以控制切片的方向,切片步长默认为1

  3. 实例

s = "我叫周杰伦,你呢? 你叫周润发吗?"
print(s[3:6])  # 从索引3位置进行切片, 切到6结束, 坑: 切片拿不到第二个位置的元素
#语法: s[start:end] 从start到end进行切片. 但是取不到end [start, end)
print(s[:5])  # 如果start是从开头进行切片, 可以省略
print(s[6:])  # 从start开始一直截取到末尾
print(s[:]) # : 如果左右两端有空白. 表示开头或者结尾
print(s[-3:-1])  # 目前还是只能从左往右切片
print(s[-1:-3])  # 没结果, 这里是坑!!!!
s = "我爱你"
#可以给切片添加步长来控制切片的方向
print(s[::-1])  # 负号表示从右往左, 前面讲的步长都是1 ,省略了。
#语法: s[start:end:step] 从start切到end, 每step个元素出来一个元素
s = "abcdefghijklmnopqrst"
print(s[2:11:3])
print(s[-1:-10:-3]) # 每三个为一组,步长正号取左边的,步长为负号取右边的。

2.set集合

2.1. 增删改查

Set集合:Set集合是无序的。
(1)set集合要求存储的数据必须是可以进行哈希计算的,根据计算出来的哈希值进行数据存储。
(2)不可哈希类型:list, dict ,因此set集合中不能出现这两种类型的元素。

# 创建set集合
s = set()
s = {1, 2, 3, "呵呵", (1, 2, 3)}

# 添加元素
s.add("zhangsan")
print(s)

# 删除元素
s.pop() # 随机删除一个元素
s.remove(2) # 删除指定数值的元素
print(s)

# 遍历
for item in s:
    print(item)

2.2. 交集、并集、差集

# 交集, 并集, 差集
s1 = {"刘能", "赵四", "皮长山"}
s2 = {"刘科长", "冯乡长", "皮长山"}

print(s1 & s2)  # 交集
print(s1.intersection(s2))

print(s1 | s2)  # 并集
print(s1.union(s2))

print(s1 - s2)  # 差集
print(s1.difference(s2))

set集合另一重要功能是去重

lst = ["周杰伦", "昆凌", "蔡依林", "侯佩岑", "周杰伦", "昆凌", "蔡依林", "侯佩岑", "周杰伦", "昆凌", "蔡依林", "侯佩岑"]
print(lst)
print(list(set(lst)))   # 去除重复之后的数据是无序的.

3.字符编码

3.1. 字符编码发展史

1. ASCII编码(开天辟地)
(1) 在计算机中,所有的数据的存储和运算时都要使用二进制数表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码(American Standard Code for Information Interchange,美国信息互换标准代码),统一规定了常用符号用哪些二进制数来表示。

(2 ) ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年。ASCII码,用一个字节表示,8位能够表示256个字符,可以用来表示所有的大小写字母,数字、特殊符号,足够美国人用的了,事实上他们只用到了128个字符,还有1位就空着了。

ascii => 编排了128个文字符号(英文大小字母,数字,特殊符号). 只需要7个0和1就可以表示了. 01111111  => 1 byte => 8bit
这个ascii一直延续到今天 (预留的1位还能编码128个文字符号)

2. ANSI标准
其他国家逐渐普及计算机…,为了满足其他国家字符编码的需要,老美搞了一个ANSI标准:每个字符使用16bit编码(2byte) ,原来ASCII的位置不变,其它的位置让各个国家(或地区)自己去编码,于是:

    ANSI => 一套标准, 每个字符 16bit, 2byte  => 2^16 = 65536
    00000000 01111111 : ascii 的位置不变,其它的位置让各个国家去自己编码
  • 中国制定了GB2312编码,把中文编码进去
  • 台湾指定了big5编码
  • 日本制定了Shift_JIS编码
  • 韩国制定了Euc-kr编码

(1) GB2312: 中国于1980年发布了GB2312,就是国标的拼音,这个编码用区位码(94个区,每区94个字符)的方式可以支持7000多个汉字,它所收录的汉字已经覆盖中国大陆99.75%的使用频率,基本可以满足汉字计算机的需要了。

(2) GBK1.0 : 7000多个汉字人类当然是不能满足,所以人们在GB2312的基础上开始扩展,所以1995年GBK1.0诞生了(国标扩展的拼音),可以支持2万多个汉字。

(3) GB18030: 2000年的时候GB18030来了,可以支持2万7千多个汉字。

存在问题:随着全球化的趋势,这套编码并不通用。

3. Unicode
Unicode编码也称万国码(满足各个国家编码的需要),但是它有一个缺点就是浪费存储空间比较大。

    早期Unicode没有意识到这个问题. UCS-2标准 2个字节. 
    进行了扩充, UCS-4 4个字节
    00000000 00000000 00000000 01111111   扩充成四个字节需要的存储空间变大了

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536(注:此处说的的是最少2个字节,可能更多)。
4. UTF编码
UTF是变长字符编码,是对Unicode编码的压缩和优化。
例如: UTF-8包含于Unicode,只是他不再使用最少使用1个字节,而是将所有的字符和符号进行分类:

  • 英文: 8bit, 1byte
  • 欧洲文字: 16bit, 2byte
  • 中文: 24bit, 3byte

另外,
(1)UTF-16 最少使用2个字节。
(2) windows默认GBK, mac默认UTF-8。GBK和UTF-8不能直接转换。
(3)ASCII 一个字节,GBK两个字节, UTF-8变长字节。

3.2. 编码和解码

1. str.encode("编码")  进行编码
2. bytes.decode("编码") 进行解码

编码:

s = "周杰伦"
bs1 = s.encode("gbk")  # b'xxxx' bytes类型
bs2 = s.encode("utf-8")
print(bs1) # b'\xd6\xdc\xbd\xdc\xc2\xd7'   一个\x是一个字节
print(bs2) # b'\xe5\x91\xa8\xe6\x9d\xb0\xe4\xbc\xa6'

如何把一个GBK字节转换UTF-8字节?
先把GBK字节转化为文字,再把文字转化为UTF-8字节。

bs = b'\xd6\xdc\xbd\xdc\xc2\xd7'
# 先变成文字符号(字符串)
s = bs.decode("gbk")   # 解码
bs2 = s.encode("utf-8")  # 重新编码
print(bs2) # b'\xe5\x91\xa8\xe6\x9d\xb0\xe4\xbc\xa6'

4. 文件读写

4.1. 文件基本操作

1. open

f = open('文件路径', mode='r', encoding='utf-8')

mode常用的模式:

  • r:表示文件只能读取
  • w:表示文件只能写入
  • a:表示打开文件,在原有内容的基础上追加内容,在末尾写入
  • w+:表示可以对文件进行读写双重操作
    mode参数可以省略不填,默认为r模式mode参数还可以指定以什么样的编码方式读写文本,默认情况下open是以文本形式打开文件的,比如上面的四种mode模式。

当你需要以字节(二进制)形式读写文件时,只需要在mode参数中追加’b’即可:

  • rb:以二进制格式打开一个文件,用于只读
  • wb:以二进制格式打开一个文件,用于只写
  • ab:以二进制格式打开一个文件,用于追加
  • wb+:以二进制格式打开一个文件,用于读写

常用方法:

f.read() # 读取文件的全部内容
f.readlines() # 读取文件的全部内容,返回一个list列表
f.readline() # 一次读取一样,可以使用while循环判断结束
f.close() # 关闭, 是一个好的习惯。如果你没有显式地关闭文件,Python的垃圾回收器最终将销毁该对象并为你关闭打开的文件,但这个文件可能会保持打开状态一段时间。

注意:
(1)当你在默认模式下读取文本文件时(二进制文件不可以),文件中的换行符会转换为’\n’形式。
(2)也就是说,你读取的txt文本,其中换行符会以’\n’形式出现,写入txt文本时,文本中的’\n’会变成换行指令。
2.使用关键字with
好处:不需要手动去关闭一个文件

with open('文件路径', mode='r', encoding='utf-8') as f: 
    lines = f.readlines()
    print(lines)
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:36:03  更:2022-04-04 12:38:13 
 
开发: 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 9:51:13-

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