Python基础知识
本文最后更新于:2021年10月4日 晚上
数据结构
序列
Python 内置多种序列,主要以列表与元组为例
主要区别在于列表可修改、元组不可修改
通用操作
-
索引
1
2
3>>> egstr = 'hello';
>>> egstr[0]
'h' -
切片:访问特定范围的元素
1
2>>> egstr[0:-1:1]
'hello'其中第一位表示起始位置,默认为零,
第二个表示特定位置但不包含在内的位置,
第三个表示步长,默认为1.
-
序列相加
-
序列乘法:常用于初始化
1
2>>> [42] *3
[42,42,42] -
len(),max(),min()
分别指代元素个数,序列中最大元素,最小元素
列表
-
基本操作
1
2
3
4
5
6
7
8x = [1,2,3]#赋值
>>> del x[2]# 删除
>>> x
[1,2]
>>>name = list('p123213')# 切片赋值,可替换长度不等徐磊
>>>name[1:] = 'ython'
>>> name
'python' -
基本方法
1
2
3
4
5
6
7
8
9
10
11
12#lst表示一个列表
lst.append(arg) #添加元素
lst.clear#清空
b = lst.copy()# b = lst,拷贝
cnt = lst.count(arg)# 计算指定元素出现次数
lst.extend(b) # b添加到lst的末尾,可对序列操作
lst.index('1')#指定值第一次出现的索引
lst.insert(3,'')# 指定位置3插入元素''
lst.pop()# pop最后一个元素
lst.remove(arg)#删除指定值的第一个元素
lst.reverse()#倒转list
lst.sort()# 排序之后详细使用
元组
通常用圆括号表示>>> 1,2,3 (1,2,3)
可用tuple([1,2,3])
将list转换为元组
字符串
设置字符串格式
基本使用对字符串调用方法format
,并提供设置的格式值。使用大括号阔起替换字段
而替换字段一般有三个部分组成
-
字段名:索引或者标识符,还可以制定列表中的元素
1
2>>> "{foo} {} {bar} {}".format(1,2,bar=4,foo=3)
'3 1 4 2' -
转换标志:叹号后面的单个字符。主要有b,c,d,e,E,f,F,g,G,n,o,s,x,X,%
1
2
3
4>>> "number is {num}".format(num=42)
'number is 42'
>>> "number is {num:f}".format(num=42)
'number is 42.000000' -
格式说明符:冒号后面的表达式:字段宽度,数精度等
1
2"pi:10.2f".format(pi=pi)
# 宽度10,保留两位小数 3.14
字符串方法
-
两边填充字符使字符串居中,默认空格
1
2>>> "The Middle by Jimmy Eat World".center(39, "*")
'*****The Middle by Jimmy Eat World*****' -
查找子串,返回第一个字符的索引,否则-1
1
2
3
4
5>>> 'With a moo-moo here, and a moo-moo there'.find('moo')
7
>>> title="123"
>>> title.find('kk')
-1 -
合并序列的元素,与split相反
1
2
3
4
5
6>>> seq = [1, 2, 3, 4, 5] # 尝试合并数字列表
>>> sep = '+'
>>> sep.join(seq)# error # 合并元素必须是字符串
>>> seq = ['1', '2', '3', '4', '5']
>>> sep.join(seq)
'1+2+3+4+5' -
字符串字母变为小写
1
2>>> 'Trondheim Hammer Dance'.lower()
'trondheim hammer dance' -
将制定子串替换为另一个字符串,并返回替换后的结果
1
2>>> 'This is a test'.replace('is', 'eez')
'Theez eez a test' -
将字符串拆分为序列,作用于join相反
1
2>>> '/usr/bin/env'.split('/')
['', 'usr', 'bin', 'env'] -
去掉字符串开头结尾的空白删除,返回删除后的结果
1
2>>> ' internal whitespace is kept '.strip()
'internal whitespace is kept' -
与replace类似,替换字符串特定部分,但是只能进行单字符替换,效率更高
使用前需要创建转换表,
1
>>> table = str.maketrans('cs', 'kz')# c\to k ,s\to z
1
2>>> 'this is an incredible test'.translate(table)
'thiz iz an inkredible tezt' -
判断字符串是否满足特定条件
isalnum、isalpha、isdecimal、isdigit、isidentifier、islower、isnumeric、isprintable、isspace、istitle、isupper
字典
字典是Python中唯一的内置映射类型,值存储于键下
-
创建字典
1
2
3
4
5
6
7phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
>>> items = [('name', 'Gumby'), ('age', 42)]
>>> d = dict(items)
>>> d
{'age': 42, 'name': 'Gumby'}
>>> d['name']
Gumby -
使用字典
基本操作
len(d)返回字典d包含的项(键值对)数。
d[k]返回与键k相关联的值。
d[k] = v将值v关联到键k。
del d[k]删除键为k的项
k in d检查字典d是否包含键为k的项。
字典方法
-
删除所有的字典项
1
2
3
4
5
6d = {'age': 42, 'name': 'Gumby'}
>>> returned_value = d.clear()
>>> d
{}
>>> print(returned_value)
None -
(浅复制
返回一个新的字典
替换副本的值时,原件不影响,修改值时原件影响
1
2
3
4
5
6
7
8>>> x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
>>> y = x.copy()
>>> y['username'] = 'mlh'
>>> y['machines'].remove('bar')
>>> y
{'username': 'mlh', 'machines': ['foo', 'baz']}
>>> x
{'username': 'admin', 'machines': ['foo', 'baz']}深复制::from copy import deepcopy
1
2
3
4
5
6
7
8
9
10>>> from copy import deepcopy
>>> d = {}
>>> d['names'] = ['Alfred', 'Bertrand']
>>> c = d.copy()
>>> dc = deepcopy(d)
>>> d['names'].append('Clive')
>>> c
{'names': ['Alfred', 'Bertrand', 'Clive']}
>>> dc
{'names': ['Alfred', 'Bertrand']} -
创建新字典,其中包含的键每个对应值为,也可提供默认值
1
2
3
4>>> {}.fromkeys(['name', 'age'])
{'age': None, 'name': None}
>>> dict.fromkeys(['name', 'age'], '(unknown)') # 默认值为(unknown)
{'age': '(unknown)', 'name': '(unknown)'} -
访问指定键的值,相较于直接访问较为宽松:访问不存在的键返回None
若存在键与直接访问相同
1
2
3
4
5
6
7
8
9>>> d = {}
>>> print(d['name']) # 不用get
Traceback (most recent call last): File "<stdin>", line 1, in ? KeyError: 'name'
# 而使用get不会这样:
>>> print(d.get('name'))
None
>>> d['name'] = 'Eric'
>>> d.get('name')
'Eric' -
返回所有字典项的列表,当然排列顺序不固定
1
2
3>>> d = {'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}
>>> d.items()
dict_items([('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]) -
返回字典试图,包含指定字典的键
-
get+del:获取与指定键相关联的值,并将该键值对从字典中删除
1
2
3
4>>> d = {'x': 1, 'y': 2}
>>> d.pop('x') 1
>>> d
{'y': 2} -
随机弹出一个字典项,较高效
ps:可预测顺序弹出需要学习模块collections中的OrderDict类
1
2
3
4
5>>> d = {'url': 'http://www.python.org', 'spam': 0, 'title': 'Python Web Site'}
>>> d.popitem()
('url', 'http://www.python.org')
>>> d
{'spam': 0, 'title': 'Python Web Site'} -
类似get获取,但当没有对应的键时返回给定的值,并添加相应键
1
2
3
4
5
6
7
8
9>>> d = {}
>>> d.setdefault('name', 'N/A') 'N/A'
>>> d
{'name': 'N/A'}
>>> d['name'] = 'Gumby'
>>> d.setdefault('name', 'N/A')
'Gumby'
>>> d
{'name': 'Gumby'} -
使用一个字典的项来更新另一字典,若包含键相同的项目就替换
1
2
3
4
5>>> d = { ... 'title': 'Python Web Site', ... 'url': 'http://www.python.org', ... 'changed': 'Mar 14 22:09:15 MET 2016' ... }
>>> x = {'title': 'Python Language Website'}
>>> d.update(x)
>>> d
{'url': 'http://www.python.org', 'changed': 'Mar 14 22:09:15 MET 2016', 'title': 'Python Language Website'} -
返回字典由值组成的字典视图,与keys返回键的不同
参考
https://techvidvan.com/tutorials/python-data-structures/
《流畅的Python》
《Python3基础教程》