python 学习速查笔记(4)
python 学习速查笔记
这一部分主要是数字,字符串,列表,元组,字典,集合的学习笔记。
这篇文章真的很长,累死了,查的时候看大纲mmd
数字
Python 数字数据类型用于存储数值。
数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间。
以下实例在变量赋值时 Number 对象将被创建:
var1 = 1
var2 = 10
使用del语句删除一些数字对象的引用。
del语句的语法是:
del var1[,var2[,var3[….,varN]]]
使用del语句删除单个或多个对象的引用,例如:
del var
del var_a, var_b
数字类型分类(三类)
类型 | 描述 | 示例 |
---|---|---|
整型(int) | 不限大小的正负整数 | 10 , -5 , 0x1F |
浮点型(float) | 含小数或科学计数法表示的数 | 3.14 , 2.5e2 |
复数(complex) | 实部+虚部(浮点数形式) | 3+4j , complex(2,3) |
布尔(bool) | int子类(True=1, False=0) | True , False |
- 整型(int) - 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作
Long
类型使用,所以 Python3 没有 Python2 的 Long 类型。布尔(bool)是整型的子类型。 - 浮点型(float) - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250)
- 复数( (complex)) - 复数由实数部分和虚数部分构成,可以用
a + bj
,或者complex(a,b)
表示, 复数的实部a和虚部b都是浮点型。
我们可以使用十六进制和八进制来代表整数
Python 数字类型转换
数据类型的转换,你只需要将数据类型作为函数名即可。
- int(x) 将x转换为一个整数。
- float(x) 将x转换到一个浮点数。
- complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
- complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。
以下实例将浮点数变量 a 转换为整数:1
2
3>>> a = 1.0
>>> int(a)
1
Python 数字运算
Python 解释器可以作为一个简单的计算器,您可以在解释器里输入一个表达式,它将输出表达式的值。
表达式的语法很直白: +
, -
,*
和 /
, 和其它语言(如Pascal或C)里一样。例如:
1 | >>> 2 + 2 |
浮点数运算有精度问题,不同机器上的结果可能不同
在整数除法中,除法/
总是返回一个浮点数,如果只想得到整数的结果,丢弃可能的分数部分,可以使用运算符//
:
1 | >>> 17 / 3 # 整数除法返回浮点型 |
注意://
得到的并不一定是整数类型的数,它与分母分子的数据类型有关系。
例如:
1 | >>> 7//2 |
等号=
用于给变量赋值。赋值之后,除了下一个提示符,解释器不会显示任何结果。
1 | >>> width = 20 |
Python 可以使用**
操作来进行幂运算:
1 | >>> 5 ** 2 # 5 的平方 |
变量在使用前必须先”定义”(即赋予变量一个值),否则会出现错误:
1 | >>> n # 尝试访问一个未定义的变量 |
不同类型的数混合运算时会将整数转换为浮点数:
1 | >>> 3 * 3.75 / 1.5 |
在交互模式中,最后被输出的表达式结果被赋值给变量 _ 。例如:
1 | >>> tax = 12.5 / 100 |
以下是 Python 中常用数学函数的详细表格(包含 math
模块和内置函数):
Python 数学函数速查表
函数/常量 | 描述 | 示例 | 输出结果 |
---|---|---|---|
内置函数 | |||
abs(x) |
返回绝对值 | abs(-5) |
5 |
round(x[, n]) |
四舍五入(可指定小数位数) | round(3.14159, 2) |
3.14 |
pow(x, y) |
计算 x 的 y 次幂(等价于 x**y ) |
pow(2, 3) |
8 |
divmod(a, b) |
返回商和余组的元组 (a//b, a%b) |
divmod(10, 3) |
(3, 1) |
math 模块函数 | (需 import math ) |
||
math.ceil(x) |
向上取整 | math.ceil(4.2) |
5 |
math.floor(x) |
向下取整 | math.floor(4.9) |
4 |
math.sqrt(x) |
平方根 | math.sqrt(16) |
4.0 |
math.exp(x) |
返回 e 的 x 次幂 | math.exp(1) |
2.718281828459045 |
math.log(x[, base]) |
对数运算(默认自然对数,可指定底数) | math.log(100, 10) |
2.0 |
math.log10(x) |
以 10 为底的对数 | math.log10(1000) |
3.0 |
math.sin(x) |
正弦函数(x 为弧度) | math.sin(math.pi/2) |
1.0 |
math.cos(x) |
余弦函数 | math.cos(0) |
1.0 |
math.tan(x) |
正切函数 | math.tan(math.pi/4) |
0.999... (≈1.0) |
math.degrees(x) |
弧度转角度 | math.degrees(math.pi) |
180.0 |
math.radians(x) |
角度转弧度 | math.radians(90) |
1.570... (≈π/2) |
math.hypot(x, y) |
计算欧几里得范数(√(x² + y²)) | math.hypot(3, 4) |
5.0 |
math.factorial(n) |
阶乘计算 | math.factorial(5) |
120 |
math.gcd(a, b) |
最大公约数 | math.gcd(36, 60) |
12 |
math 常量 | |||
math.pi |
圆周率 π | math.pi |
3.141592653589793 |
math.e |
自然常数 e | math.e |
2.718281828459045 |
math.inf |
正无穷大 | math.inf > 1e10 |
True |
math.nan |
非数字(Not a Number) | math.isnan(math.nan) |
True |
使用示例代码
1 | import math |
注意事项
- 精度问题:浮点数运算可能存在微小误差(如
math.sin(math.pi)
实际输出1.2246467991473532e-16
而非0
)。 - 异常处理:负数开平方会引发
ValueError
,建议用try-except
捕获。 - 性能:对于大量计算,考虑使用
numpy
替代math
模块。
建议将此表格保存为快速参考手册!
字符串
Python 字符串操作完全指南
1. 访问字符串中的值
Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。
Python 访问子字符串,可以使用方括号 [] 来截取字符串,字符串的截取的语法格式如下:
1 | 变量[头下标:尾下标] |
索引访问
- Python 字符串是字符的有序集合,可通过索引访问单个字符
- 索引从0开始,支持正向索引和反向索引
- 正向索引:
0
到len(str)-1
- 反向索引:
-1
表示最后一个字符,-len(str)
表示第一个字符
1 | s = "Python" |
切片访问
- 语法:
str[start:end:step]
- 左闭右开区间:包含start,不包含end
- 省略值:
- start默认为0
- end默认为字符串长度
- step默认为1
1 | s = "Hello World" |
注意:
- 索引越界会引发
IndexError
注意字长防止越界 - 切片越界不会报错,会自动调整到有效范围
2. 字符串更新
字符串不可变性
- Python字符串是不可变对象,不能直接修改某个字符
- 必须通过创建新字符串实现”修改”
内存对象会发生变化
1 | s = "Python" |
常用更新方法
1 | # 替换子串 |
3. 转义字符
常见转义字符
在需要在字符中使用特殊字符时,python 用反斜杠 \ 转义字符。如下表:
转义字符 | 描述 | 示例 |
---|---|---|
\\ |
反斜杠 | "C:\\path" |
\' |
单引号 | 'It\'s' |
\" |
双引号 | "He said \"Hi\"" |
\n |
换行 | "Line1\nLine2" |
\t |
水平制表符 | "Name\tAge" |
\r |
回车 | "Hello\rWorld" |
\b |
退格 | "Hel\blo" |
\uxxxx |
Unicode字符 | "\u03A9" (Ω) |
特殊案例,使用\r 实现百分比进度: |
1 | import time |
以下实例,我们使用了不同的转义字符来演示单引号、换行符、制表符、退格符、换页符、ASCII、二进制、八进制数和十六进制数的效果:(整体效果)
1 | print('\'Hello, world!\'') # 输出:'Hello, world!' |
原始字符串
- 在字符串前加
r
或R
,转义字符不会生效 - 常用于正则表达式和文件路径
1 | path = r"C:\new_folder\test.txt" |
4. 字符串运算符
基本运算符
不是数字运算符,具有和长得像罢了(ノ ̄▽ ̄)
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
+ |
字符串连接 | "Py" + "thon" |
"Python" |
* |
重复字符串 | "Hi" * 3 |
"HiHiHi" |
[] |
索引访问 | "Python"[1] |
'y' |
[:] |
切片 | "Python"[1:4] |
'yth' |
in |
成员检查 | 'Py' in 'Python' |
True |
not in |
非成员检查 | 'Ruby' not in 'Python' |
True |
我摘这里搞个是咧捏: |
1 | #!/usr/bin/python3 |
输出结果如下啊
a + b 输出结果: HelloPython
a * 2 输出结果: HelloHello
a[1] 输出结果: e
a[1:4] 输出结果: ell
H 在变量 a 中
M 不在变量 a 中
\n
\n
比较运算符
字符串按字典序比较(ASCII/Unicode码值):
1 | print("apple" < "banana") # True |
5. 字符串格式化
Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
有点像c欸(。◕ˇ∀ˇ◕)
各个版本的我都搞下
1. % 格式化 (旧式)
1 | name = "Alice" |
格式符 | 说明 |
---|---|
%s |
字符串 |
%d |
十进制整数 |
%f |
浮点数 |
%x |
十六进制整数 |
2. str.format() (Python 2.6+)
1 | print("Name: {}, Age: {}".format(name, age)) |
3. f-string (Python 3.6+ 推荐)
1 | print(f"Name: {name}, Age: {age}") |
格式化规范:
1 | pi = 3.1415926 |
6. 三引号字符串
python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
特点
- 使用三个单引号
'''
或双引号"""
- 保留所有格式(换行、缩进等)
- 常用于多行字符串、文档字符串(docstring)
1 | multi_line = """第一行 |
文档字符串示例
1 | def calculate(a, b): |
makedown玩家狂喜(⁎˃ᴗ˂⁎),所见即所得万岁!!
7. Unicode 字符串
在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。
Python 3 的字符串
- Python 3 中所有字符串默认都是Unicode字符串(
str
类型) - 使用
\u
转义表示Unicode字符 - 支持多语言字符
1 | s = "中文 Español Français" |
编码转换
1 | # str → bytes |
注意:
- 文件操作时注意指定编码:
open("file.txt", encoding="utf-8")
- 避免”编码地狱”:统一使用UTF-8编码
8. 字符串内建函数
常用方法
方法 | 描述 | 示例 | 结果 |
---|---|---|---|
str.lower() |
转为小写 | "Python".lower() |
'python' |
str.upper() |
转为大写 | "Python".upper() |
'PYTHON' |
str.strip() |
去除两端空白 | " hello ".strip() |
'hello' |
str.split() |
分割字符串 | "a,b,c".split(',') |
['a', 'b', 'c'] |
str.join(iterable) |
连接序列元素 | ','.join(['a', 'b', 'c']) |
'a,b,c' |
str.find(sub) |
查找子串位置 | "python".find('th') |
2 |
str.replace(old, new) |
替换子串 | "hello".replace('l', 'L') |
'heLLo' |
str.startswith(prefix) |
检查前缀 | "hello".startswith('he') |
True |
str.endswith(suffix) |
检查后缀 | "hello".endswith('lo') |
True |
str.isdigit() |
是否全数字 | "123".isdigit() |
True |
str.isalpha() |
是否全字母 | "abc".isalpha() |
True |
重要方法详解
1. split() vs splitlines()
1 | text = "line1\nline2\r\nline3" |
2. partition() 与 rpartition()
1 | url = "user:pass@domain.com" |
3. 字符串填充
1 | print("42".zfill(5)) # '00042' (左侧补零) |
- split() vs splitlines()
split() - 切菜刀
- 默认按空格/换行/制表符切:
"a b c".split()
→['a','b','c']
- 可以指定切什么:
"a,b,c".split(',')
→['a','b','c']
- 遇到连续分隔符会切出空字符串:
"a,,b".split(',')
→['a','','b']
- 默认按空格/换行/制表符切:
splitlines() - 智能换行切割机
- 专切换行,不管你是
\n
还是\r\n
都能认 "第一行\n第二行".splitlines()
→['第一行','第二行']
- 不会像split()那样切出空行
- 专切换行,不管你是
- partition() 和 rpartition()
都是切三段的刀,找到第一个指定分隔符切成:
- 分隔符前 | 分隔符自己 | 分隔符后
partition() - 从左往右找
1
"账号:密码@网址".partition('@') → ('账号:密码', '@', '网址')
rpartition() - 从右往左找
1
"图片.jpg".rpartition('.') → ('图片', '.', 'jpg')
找不到分隔符时:返回
(原字符串, '', '')
- 字符串填充
zfill() - 补零神器
1
"5".zfill(3) → '005' # 补到3位
center() - 文字居中
1
"hi".center(6,'*') → '**hi**' # 总长度6,两边用*填
ljust()/rjust() - 左右对齐
1
2"hi".ljust(4) → 'hi ' # 长度4,右边补空格
"hi".rjust(4,'-') → '--hi' # 左边补-
一句话总结
split()
:随便切,splitlines()
专切换行partition()
:切三段,从左/从右找分隔符- 填充方法:
zfill
补零,center
居中,ljust/rjust
左右对齐
关键要点总结
- 不可变性:字符串创建后不能修改,所有”修改”操作都返回新字符串
- 编码规范:Python 3 默认使用Unicode,处理文件时明确指定编码
- 性能考虑:
- 避免循环中使用
+
拼接字符串(使用join()
更高效) - 频繁字符串操作考虑使用
io.StringIO
- 避免循环中使用
- 格式化选择:
- Python 3.6+ 优先使用f-string
- 需要兼容旧版本时用
str.format()
- 安全注意:
- 避免用
eval()
处理字符串 - SQL查询使用参数化而非字符串拼接
- 避免用
列表
这还有多少部分啊啊!!凸(艹皿艹 ),写不动了捏
序列是 Python 中最基本的数据结构。
序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。
Python 有6
个序列的内置类型,但最常见的是列表和元组。
列表都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python 已经内置确定序列的长度以及确定最大和最小的元素的方法。
列表的数据项不需要具有相同的类型
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
1 | list1 = ['Google', 'Runoob', 1997, 2000] |
像不像数组啊喵
详细解释点这里,点这里啊,你为什么不点 ̄へ ̄
创建列表(注意列表格式)【很重要所以我先放上来了】
1 | # 空列表 |
Python3 列表完全指南
1. 列表基础
列表是Python中最灵活的数据结构,用方括号[]
表示,元素用逗号分隔。
创建列表(注意列表格式)
1 | # 空列表 |
特点:
- 有序集合(元素有固定位置)
- 可变(可以修改内容),这就比呢个啥字符串自由多了吧
- 可包含任意数据类型,ヾ(゚∀゚ゞ)z真的吗
- 支持重复元素
2. 访问列表元素
你看下面的东西,直接搬用吧
索引访问
1 | fruits = ["apple", "banana", "cherry"] |
切片操作
1 | numbers = [0, 1, 2, 3, 4, 5] |
3. 修改列表
更新元素
1 | fruits = ["apple", "banana", "cherry"] |
极高的效率
添加元素
1 | # 末尾添加 |
删除元素
1 | # 按索引删除 |
4. 列表运算符
又称为Python列表脚本操作符 ︿( ̄︶ ̄)︿
运算符 | 描述 | 示例 |
---|---|---|
+ |
列表拼接 | [1,2] + [3,4] → [1,2,3,4] |
* |
重复列表 | [0]*3 → [0,0,0] |
in |
成员检测 | 2 in [1,2,3] → True |
== |
列表比较 | [1,2] == [1,2] → True |
5. 常用列表方法
方法 | 描述 | 示例 |
---|---|---|
len() |
返回列表长度 | len([1,2,3]) → 3 |
sort() |
原地排序 | [3,1,2].sort() → [1,2,3] |
reverse() |
反转列表 | [1,2,3].reverse() → [3,2,1] |
count() |
统计元素出现次数 | [1,2,2].count(2) → 2 |
index() |
返回元素首次出现的索引 | ["a","b"].index("b") → 1 |
copy() |
浅拷贝列表 | new = old.copy() |
6. 列表推导式
简洁创建列表的方式:
1 | # 创建平方数列表 |
劲啊,我感觉到了算法题深深的恶意 ╥﹏╥
7. 注意事项
可变性:列表可变,函数可能修改原始列表
1
2
3
4
5def modify(lst):
lst.append(1)
my_list = []
modify(my_list) # my_list会被修改浅拷贝问题:
1
2
3original = [[1,2], [3,4]]
copied = original.copy()
copied[0][0] = 99 # 也会修改original!性能考虑:
append()
/pop()
是O(1)操作insert(0, x)
/remove()
是O(n)操作
内存效率:
- 列表比元组占用更多内存
- 大数据集考虑使用生成器或NumPy数组
8. 实用技巧(你猜为什么变成二级索引)
直接复制版用吧,这个真的很有用
1 | # 同时遍历索引和值 |
列表是Python中最常用的数据结构之一,掌握这些操作可以大大提高编码效率!
马上到元组了,呼呼,快结束了捏
元组
Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号 ( ),列表使用方括号 [ ]。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
不信你看嘛╭(╯^╰)╮
1 | 'Google', 'Runoob', 1997, 2000) tup1 = ( |
Python3 元组完全指南
1. 元组基础
元组是Python的不可变序列,用圆括号()
表示,元素用逗号分隔。
创建元组
1 | ## 空元组 |
特点:
- 不可变性(创建后不能修改) 这……肯定有他的优势
- 有序集合(元素有固定位置) 这不显得你好找吗
- 可包含任意数据类型
- 比列表更节省内存,看见没,用户的内存又不是我的内存
2. 访问元组元素
看着用吧(〃’▽’〃)
索引访问
元组可以使用下标索引来访问元组中的值,如下实例:
1 | tup = ('Google', 'Runoob', 'Taobao') |
切片操作
1 | numbers = (0, 1, 2, 3, 4, 5) |
3. 元组操作
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:
元组拼接
1 | tup1 = (1, 2, 3) |
元组重复
1 | tup = ('Hi!',) * 3 # ('Hi!', 'Hi!', 'Hi!') |
h和那个啥差不多,别用错了啊
成员检测
1 | print(3 in (1, 2, 3)) # True |
4. 元组不可变性
无法修改元素
1 | tup = (1, 2, 3) |
重新赋值
1 | tup = (1, 2, 3) |
5. 元组内置函数
函数 | 描述 | 示例 |
---|---|---|
len() |
返回元组长度 | len((1,2,3)) → 3 |
max() |
返回最大值 | max((1,3,2)) → 3 |
min() |
返回最小值 | min((1,3,2)) → 1 |
tuple() |
将可迭代对象转为元组 | tuple([1,2,3]) → (1,2,3) |
6. 元组解包
基本解包
1 | tup = (1, 2, 3) |
一一对应
星号解包
1 | first, *middle, last = (1, 2, 3, 4, 5) |
7. 元组与列表对比
特性 | 元组 | 列表 |
---|---|---|
可变性 | 不可变 | 可变 |
语法 | () |
[] |
内存占用 | 较小 | 较大 |
方法 | 较少 | 丰富 |
适用场景 | 数据保护/字典键/函数返回值 | 需要频繁修改的数据集合 |
8. 使用场景
适合使用元组的情况
字典键(因为不可变):
1
dict_with_tuple = {(1,2): "value"}
函数多返回值:
1
2
3
4def get_stats():
return 10, 20, 30 # 自动打包为元组
min, max, avg = get_stats() # 解包保护数据不被修改:
1
CONSTANTS = (3.14, 2.718) # 确保不会被意外修改
9. 性能比较
1 | import sys |
10. 实用技巧
元组与字符串转换
1 | chars = tuple("Hello") # ('H', 'e', 'l', 'l', 'o') |
命名元组(更高级用法)
1 | from collections import namedtuple |
元组虽然简单,但在Python编程中非常重要,特别是在需要保证数据不被修改的场景下非常有用!
字典
哈哈哈,文章太长了,颜色都没有了(指的是makedown编辑器)
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值key=>value
对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号{}
中 ,格式如下所示:
1 | d = {key1 : value1, key2 : value2, key3 : value3 } |
Python3 字典完全指南
1. 字典基础
字典是Python中的键值对集合,用花括号{}
表示,键值对用冒号:
分隔。
创建字典
1 | # 空字典 |
特点:
- 键必须是不可变类型(字符串/数字/元组)WARING
- 值可以是任意类型
- 键唯一,重复键会覆盖前值 注意覆盖关系,类似结构体在内存中的关系
- Python 3.7+ 保持插入顺序
2. 访问字典元素(记住上面创建字典的初值)
基本访问
把相应的键放入到方括号中j即可访问,不存在的键会报错
1 | print(person['name']) # 'Alice' |
安全访问方法
1 | # get()方法 |
3. 修改字典
向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对
添加/更新元素
1 | person['age'] = 26 # 更新已有键 |
合并字典
1 | # update()方法 |
4. 删除元素
能删单一的元素也能清空字典,清空只需一项操作。
各种删除方法
1 | # del语句 |
5. 字典视图对象
三种视图方法
1 | person = {'name': 'Alice', 'age': 25} |
视图特性:
- 动态反映字典变化
- 可迭代
- 支持集合操作(Python 3+)
6. 字典推导式
创建字典的简洁方式
1 | # 基本形式 |
7. 常用字典方法
方法 | 描述 | 示例 |
---|---|---|
len() |
返回键值对数量 | len(person) → 3 |
copy() |
浅拷贝 | new = person.copy() |
fromkeys() |
用序列创建新字典 | dict.fromkeys(['a','b'], 0) → {'a':0, 'b':0} |
in |
检查键是否存在 | 'name' in person → True |
reversed() |
反向迭代键(Python 3.8+) | list(reversed(person)) |
8. 字典与JSON转换
1 | import json |
9. 高级技巧
默认字典
1 | from collections import defaultdict |
有序字典
1 | from collections import OrderedDict |
合并多个字典
1 | # Python 3.5+ |
10. 性能与内存
- 查找速度:O(1)时间复杂度
- 内存占用:比列表更大
- 键哈希:键必须是可哈希对象(不可变类型)
11. 常见错误与解决
KeyError异常
1
2
3
4
5# 错误方式
value = my_dict['nonexistent_key']
# 正确方式
value = my_dict.get('nonexistent_key', default_value)可变对象作为键
1
2
3
4
5# 错误:列表不可哈希
bad_dict = {['a']: 1}
# 正确:使用元组
good_dict = {('a',): 1}字典比较顺序
1
2# Python 3.7+ 字典比较顺序敏感
{'a':1, 'b':2} == {'b':2, 'a':1} # False(Python 3.6及之前可能为True)
字典是Python中最重要和高效的数据结构之一,掌握这些技巧可以大幅提升编程效率!
马上结束了,呜呜(T▽T)
集合
集合是一个无序的不重复元素序列。
集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。
可以使用大括号{ }
创建集合,元素之间用逗号,
分隔, 或者也可以使用set()
函数创建集合。
Python3 集合完全指南
1. 集合基础
集合是Python中的无序不重复元素集,用花括号{}
表示(空集合必须用set()
创建)。
创建集合
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。里面有初始值那你随意
1 | # 空集合 |
特点:
- 元素唯一(自动去重)
- 无序(不记录插入顺序)
- 可包含不可变类型(数字/字符串/元组)
- 可变(可增删元素)
到这里我已经很累了
2. 基本操作
添加元素
语法格式如下:
s.add( x )
s.update( x ) #参数可以是列表,元组,字典等
将元素添加到集合中,如果元素已存在,则不进行任何操作。
1 | fruits = {'apple', 'banana'} #原有集合 |
移除元素
s.remove( x )
s.discard( x )
s.pop()
1 | # 安全移除(元素不存在不报错) |
3. 集合运算
要知道一件事,那就是在表格中看你不见的一般是|
,这玩意会变成表格边边
基本运算
运算符/方法 | 描述 | 示例 |
---|---|---|
` | 或 union()` |
并集 |
& 或 intersection() |
交集 | a & b |
- 或 difference() |
差集 | a - b |
^ 或 symmetric_difference() |
对称差集(仅出现在一个集合中的元素) | a ^ b |
示例
1 | a = {1, 2, 3} |
4. 集合关系判断
方法 | 描述 | 示例 |
---|---|---|
issubset() 或 <= |
判断子集 | a.issubset(b) |
issuperset() 或 >= |
判断超集 | a.issuperset(b) |
isdisjoint() |
判断无交集 | a.isdisjoint(b) |
1 | a = {1, 2} |
5. 集合推导式
类似列表推导式,生成集合:
1 | # 生成字符集合(自动去重) |
6. 不可变集合(frozenset)
1 | # 创建不可变集合 |
7. 常用方法速查
方法 | 描述 | 时间复杂度 |
---|---|---|
len(s) |
返回元素个数 | O(1) |
x in s |
成员检测 | O(1) |
copy() |
浅拷贝 | O(n) |
difference_update() |
原地差集操作 | O(len(b)) |
intersection_update() |
原地交集操作 | O(len(b)) |
symmetric_difference_update() |
原地对称差集操作 | O(len(b)) |
8. 实用技巧
快速去重
1 | names = ['Alice', 'Bob', 'Alice', 'Charlie'] |
元素存在性测试
1 | valid_users = {'Alice', 'Bob', 'Charlie'} |
集合与字典键转换
1 | # 字典键转集合 |
9. 性能特点
- 查找速度:O(1) 时间复杂度
- 内存占用:比列表更大
- 适用场景:
- 快速成员检测
- 数据去重
- 数学集合运算
10. 注意事项
不可哈希元素:
1
2# 错误:列表不可哈希
invalid_set = {[1,2], [3,4]} # TypeError顺序不可靠:
1
2# Python 3.7+ 字典保持插入顺序,但集合仍然无序
print({1, 2} == {2, 1}) # True空集合陷阱:
1
2empty = {} # 这是字典!
empty = set() # 这才是空集合
集合是处理唯一性数据和数学运算的强大工具,合理使用可以大幅提升代码效率和可读性!
到这里吧,就到这里吧,累了真的