记一些 Python 的学习笔记,数据类型基础:
数据类型
- 数字
Number
- 字符串
String
- 列表
List
- 元组
Tuple
- 字典
Dictionary
- 集合
Sets
不可变数据:Number
(数字)、String
(字符串)、Tuple
(元组)、Sets
(集合)。
可变数据:List
(列表)、Dictionary
(字典)。
数字:Python3 支持 int
、float
、bool
、complex
(复数)。
整数
- 一些常用计算:
运算 | 输入 | 输出 | 描述 |
---|---|---|---|
除法 | 2 / 2 | 1.0 | 永远返回一个浮点数 |
floor除法 | 3 // 2 | 1 | 丢掉任何小数部分,返回整数 ( 1.5 -> 1 ) |
求余 | 17 % 3 | 2 | 返回整数 |
幂乘方 | 5 ** 2 | 25 | 5 的平方 |
- 十六进制表达: 加
0x
前缀,例如0xff00
浮点数
整数和浮点数的混合计算中,会转换为浮点数计算。
- 科学计数法:
1.23e9
和1.2e-5
复数
3+5j
,虚数部分用 j
表示,或 complex(3, 5)
。
布尔值
True
和 False
,注意区分大小写。
字符串
- 转义符:
\
输入 | 输出 | 描述 |
---|---|---|
'\'' | ' | 能正确输出 ' |
'\n' |
| 会换行 |
'\\n' | \n | 不会换行 |
r'\n' | \n | r'string' 默认字符串为原始字符串,不转义 |
- 多行字符串文本:
'''\
这是第一行
这是第二行
'''
- 字符串拼接:
描述 | 输入 | 输出 |
---|---|---|
重复 | 'un' * 3 | ununun |
连接 | 'un' + 'un' | unun |
相邻文本自动连接 | 'un' 'un' | unun |
自动连接不适用于表达式 | ('un' * 3) 'un' | error |
- 截取、切片:
a = 'Python'
print(a[0]) # 输出 P
print(a[-1]) # 输出 n ,最后一位,-0实际是0
# 切片 左闭右开
print(a[:2]) # 输出 Py
print(a[2:]) # 输出 thon
print(a[:100]) # 输出 Python
print(a[100:]) # 输出 ''
格式化:
例一:
'Hello, %s' % 'world'
,实际输出'Hello, world'
, 其中%s
被替换成world
。例二:
'%s, you have %d apples' % ('Ben', 2)
,实际输出'Ben, you have 2 apples'
, 其中%s
被替换成Ben
,%d
被替换成2
。例三:
'%d' % 3
'%2d' % 3
'%02d' % 3
, 实际输出'3'
' 3'
'03'
,依次代表正常、2位数(右对齐)、2位数前置补0。
'%.2f' % 3.1415
, 实际输出'3.14'
, 保留两位小数。例四:
'Hello, {0}, {1.2f}'.format('Ben', 3.1415)
,实际输出Hello, Ben, 3.14
。
正常输出 %
用 %%
转义
占位符 | 描述 |
---|---|
%d | 整数 |
%f | 浮点数 |
%s | 字符串 |
%x | 十六进制 |
- 和数字比较
字符串不能直接和数字比较, int('123') < 1000
。
列表
有序集合,可添加和删除其中元素
- 索引
a = ['Python', 123, True, 'XYZ']
print(a[0]) # 输出 Python
print(a[-1]) # 输出 XYZ
print(a[100]) # 错误
# 切片 左闭右开
a[0:1] = [] # 现在 a 为 [123, True, 'XYZ']
- 增删
a = ['Python', 123, True, 'XYZ']
# 删
print(a.pop()) # 输出 XYZ, 现在 a 为 ['Python', 123, True]
print(a.pop(1)) # 输出 123, 现在 a 为 ['Python', True]
a.remove('Python') # 移除列表中第一个匹配项
del a[0] # 删除项
# 增
a = ['Python', True]
a.append('XYZ') # 现在 a 为 ['Python', True, 'XYZ']
- 列表生成式
squares = [x**2 for x in range(10)] # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
squares = [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y] # [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
- 生成器
创建一个包含100万个元素的列表,会占用大量内存,并且通常也用不到全部元素。而生成器不必创建完整的列表,而是在循环的过程中不断推算出后续的元素,节省了大量空间。
squares = (x * x for x in range(10)) # 可用 for 循环迭代
# 把函数变成生成器 generator
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b # 调用 next() 时的返回,再次执行时从此处继续
a, b = b, a + b
n = n + 1
return 'done'
元组
一旦初始化就不能改变
t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X' # 此时 t 为 ('a', 'b', ['X', 'B'])
上面代码,修改的是元组 t
中的列表, 元组并没有改变,因为 t[2]
指向没变。
只有一个元素的写法 t = (1,)
,因为 t = (1)
实际为数字 1
。
字典
使用 键-值(key-value)储存,具有极快的查找速度
a = {
'Ben': 2,
'Lemon': 3,
'Tom': 6
}
# 如果key不存在,dict就会报错
print(a['Jack']) # error
# 两种方法避免因为key不存在而报错
# 1. in判断是否存在
if 'Jack' in a:
print(a['Jack'])
# 2. 通过字典提供的get()方法
a.get('Jack') # return None
a.get('Jack', -1) # return -1
# 删除
a.pop('Ben') # return 2 此时 a 为 {'Lemon': 3, 'Tom': 6}
# 输出所有键
print(a.keys()) # return dict_keys(['Lemon', 'Tom'])
# 输出所有值
print(a.values()) # return dict_values([3, 6])
dict
内部存放的顺序,和 key
放入的顺序没有关系。
key
不能变,所以用字符串、整数等作为 key
,不能使用 list
。
集合
无序和无重复元素的集合,类似于只有
key
没有value
的字典,比如{1, 2, 3}
,key
同样不能是可变元素list
。
# 创建集合
s = set([1, 2, 3]) # 提供一个 list 作为输入集合
# 重复元素在set中自动被过滤
s = set([1, 1, 2, 2, 3, 3])
# 显示的顺序也不表示set是有序的
>>> s
{1, 2, 3}
# 增
s.add(4) # {1, 2, 3, 4}
# 删
s.remove(4) # {1, 2, 3, 4}
s1 = set([1, 2, 3])
s2 = set([2, 3, 4])
# 交集
>>> s1 & s2
{2, 3}
# 并集
>>> s1 | s2
{1, 2, 3, 4}
s = set([(1, 2, 3)])
print(s) # {(1, 2, 3)}
s = set([(1, 2, [3, 4])])
print(s) # error
数据类型函数整合
一些和数据类型有关的函数整理,并标出相应的模块
数字函数
- 数学函数
函数 | 描述 |
---|---|
abs(x) | 绝对值 |
max(x, y, z) | 返回参数中的最大值 |
min(x, y, z) | 返回参数中的最小值 |
pow(x, y) | 返回 x 的 y 次方 |
round(x[, y]) | x 四舍五入到 y 位小数,无参数 y 则默认整数 |
math.ceil(x) | 向上取整 |
math.floor(x) | 向下取整 |
math.exp(x) | e 的 x 次幂 |
math.fabs(x) | 绝对值,返回浮点数 |
math.log(x) | 以 e 为基数的 x 的对数 |
math.log10(x) | 以 10 为基数的 x 的对数 |
math.modf(3.15) | 返回(小数部分,整数部分),例 (0.149999, 3.0),都是浮点数 |
math.sqrt(x) | x 的平方根,浮点型 |
- 数学常量
常量 | 描述 |
---|---|
math.pi | 圆周率 |
math.e | 自然常数 |
- 随机数函数
常量 | 描述 |
---|---|
random.choice(seq) | 从序列的元素中随机挑一个 |
random.randrange([开始值,]结束值[, 间隔步长]) | 从指定范围指定步长中获取随机数,步长默认1 |
random.random | 随机生成 [0,1) 的随机数 |
random.shuffle(list) | 将整个序列随机排序, 返回 None |
random.uniform(x, y) | 生成 [x, y] 范围内的一个随机数 |
- 三角函数
函数 | 描述 |
---|---|
math.acos(x) | x 的反余弦弧度值 |
math.asin(x) | x 的反正弦弧度值 |
math.atan(x) | x 的反正切弧度值 |
math.atan2(y, x) | 给定的 x、y 坐标的反正切弧度值 |
math.cos(x) | 余弦 |
math.sin(x) | 正弦 |
math.tan(x) | 正切 |
math.degrees(x) | 弧度转角度,浮点型 |
math.radians(x) | 角度转弧度,浮点型 |
字符串方法
函数 | 描述 |
---|---|
capitalize() | 首字符大写 |
lower() | 全转为小写 |
upper() | 全转为大写 |
center(w, f) | 以 w 为宽居中,以 f 填充 |
ljust(w[, f]) | 以 w 为宽左对齐,以 f 填充,默认空格 |
rjust(w[, f]) | 以 w 为宽右对齐,以 f 填充,默认空格 |
count(str, beg=0, end=len(str)) | str 在字符串中出现次数,beg 和 end 指定查找位置 |
endswith(str, beg=0, end=len(str)) | 是否以 str 结束 |
expandtabs(tabsize=8) | 将 tab 转为空格,默认为 8 空格 |
find(str, beg=0, end=len(str)) | 返回 str 在字符串中位置,没有则 -1 |
rfind(str, beg=0, end=len(str)) | 从右边找 |
index(str, beg=0, end=len(str)) | 返回 str 在字符串中位置,没有则报错 |
join(seq) | 以字符串作间隔符,将序列seq合并为新字符串 |
lstrip() | 截掉字符串左边的空格或指定字符 |
rstrip() | 截掉字符串右边的空格或指定字符 |
strip() | 截掉字符串两边的空格或指定字符 |
replace(old, new[, max]) | 将字符串中 old 替换为 new,不超过 max 次 |
列表方法
函数 | 描述 |
---|---|
append(obj) | 在列表末尾添加新对象 |
count(obj) | 某个元素在列表中出现的次数 |
extend(seq) | 将另一个序列中的值追加到列表末尾 |
index(obj) | 返回第一个匹配项的索引位置 |
insert(index, obj) | 将对象插入列表 |
pop(index) | 移除列表中的一个元素,默认最后一个元素,并返回值 |
remove(obj) | 移除某个值的第一个匹配项 |
reverse() | 反向排列 |
sort([func]) | 排序 |
clear() | 清空列表 |
copy() | 复制列表 |
字典方法
函数 | 描述 |
---|---|
clear() | 删除字典内所有函数 |
copy() | 返回一个字典的浅复制 |
get(key[, defaultValue]) | 返回指定键的值,如果没有就返回 defaultValue |
key in dict | key 在字典中就返回 True, 否则返回 False |
items() | 返回可遍历的(键,值)元组列表,例 dict_items([(‘key1’, ‘value’), (‘key2’, ‘value2’)]) |
keys() | 以列表返回所有键 |
values() | 以列表返回所有值 |
setdefault(key, default=None) | 如果键不存在,则设为default |
update(otherDict) | 将 otherDict 的键、值更新到字典中 |
pop(key[, default]) | 删除 key 所对应的值,返回为被删除的值。找不到 key,返回default 值 |
popitem() | 随机返回并删除字典中的一对键和值(一般删除末尾对) |