列表和元组
通用的序列操作
索引
负索引从后往前, 最后一个字符为-1
>>> 'abce'[3]
'e'
>>> 'abc'[-3]
'a'
切片(P26)
使用两个索引, 中间用冒号分隔(左闭右开)
如果第一个索引位于第二个索引前面, 返回空序列
如果切片开始于开头, 可忽略第一个索引, 结束于末尾, 可忽略第二个索引
>>> s='abcd'
>>> s[1:2]
'b'
>>> s[-3:-1]
'bc'
>>> s[-3:]
'bcd'
>>> s[:]
'abcd'
切片第三个参数为步长, 默认为1, 代表每隔(步长-1)个元素提取一个元素, 负数步长代表从右往左提取元素(此时第一个索引必须在第二个索引后面)
>>> numbers[-1:-5:-2]
[6, 4]
>>> numbers[1:5:2]
[2, 4]
加法
将两个序列拼接
乘法
序列乘以一个数x表示重复这个序列x次
in
检查特定的值是否在序列中
>>> "xy" in "fawefxy"
True
>>> 10 in [1, 2, 10]
True
len, max, min函数
返回元素个数, 最大元素, 最小元素
len([1, 2, 3]) # 3
min([1, 2, 3]) # 3
min([1, 2], [3]) # [1, 2]
列表(P31)
list(): 将一个序列作为参数, 返回一个列表
基本操作
-
修改列表, 给元素赋值
x = [1, 2, 3, 4] x[3] = 5 # [1, 2, 3 ,5]
-
删除元素
del x[2] # [1, 2, 5]
-
给切片赋值
可以对切片进行赋值
>>> x = [1, 2, 3, 4] # 整段替换 >>> x[3:] = [4, 5 ,6, 7] >>> x [1, 2, 3, 4, 5, 6, 7] # 替换切片 >>> x[-1:-5:-2] = [1, 2] >>> x [1, 2, 3, 4, 2, 6, 1] # 替换一个空切片达到插入元素的效果 >>> x[1:1] = 'a' >>> x [1, 'a', 2, 3, 4, 2, 6, 1] # 将一个切片替换为空序列达到删除元素效果 >>> x[0:1] = [] >>> x ['a', 2, 3, 4, 2, 6, 1]
列表方法
-
append(): 追加元素到列表末尾
-
clear()
-
copy(): 复制列表并返回(python中所有并变量都是类似C++中引用的, 直接赋值相当于两个变量指向了同一个值)
-
count(): 返回指定元素在列表中出现的次数
-
extend(): 将多个值添加到列表末尾
-
index(): 返回指定值在列表中第一次出现的索引, 不存在则异常
-
insert(pos, value): 将一个元素插入列表, 相当于ls[pos:pos] = value
-
pop(): 删除列表尾元素并返回
-
remove(): 删除第一个为指定值的元素, 不存在则异常
-
reverse(): 列表倒序
-
sort(): 将列表原地排序, 有两个可选参数sort(key, reverse), 第一个参数为用于排序的函数(对于每个元素创建一个键, 并据此排序), reverse为True时相反顺序排序
>>> x = ['1234', '342', '34', '23425'] >>> x.sort(key=len, reverse=True) >>> x ['23425', '1234', '342', '34']
-
sorted(): 返回一个排序好的新列表
-
元组(P39)
元组为不可修改的序列, 用圆括号扩起或则用逗号分隔
>>> 1, 2, 3
(1, 2, 3)
>>> (1, 2, 3)
(1, 2, 3)
>>> 1,
(1,)
tuple(): 将一个序列作为参数返回一个元组
字符串
设置字符串格式(P42)
内容比较繁杂, 大致介绍, 用到的时候再翻书
有两种形式:
-
在%左边指定一个字符串(格式字符串), 右边指定一个要设置其格式的值(可使用元组或字典或单个值)
>>> "%d %.2f"%(10, 23) '10 23.00'
-
format, 每个被替换字段使用花括号括起, 可以给替换字段指定名称({name}关键字参数), 也可以不指定名称或以索引为名称({}位置参数), format中, 位置参数需写在关键字参数前面
>>> "{name}{value:.2f}{1}{1}".format(2, 3, name='fuck', value=10.2) 'fuck10.2033'
-
f字符串, 可直接使用同名变量替换字段
>>> from math import e >>> f"e={e}" 'e=2.718281828459045'
字符串格式详细(P43)
类似C++, 用<, >, ^表示左对齐, 右对齐, 居中
字符串方法(P48和附录B)
-
center: 在字符串两边填充字符, 原字符串达到指定长度并原字符串居中(或在中间偏左)
-
find: 查找子串第一次出现位置, 找不到返回-1
-
join: 将字符串序列合并为一个字符串, 用join前的字符串分隔
-
split: 和join相反, 将字符串拆分(以split后面的分隔符分隔)
>>> t = "ab".join(["1", "2", "3"]) >>> t '1ab2ab3' >>> t.split("ab") ['1', '2', '3']
-
lower: 返回字符串小写版本; title: 所有单词首字母大写; islower()….
-
replace: 将指定子串替换并返回替换后的新字符串
-
strip: 将开头和结尾的空白删除, 也可以指定要删除的字符, 还有lstrip和rstrip
-
translate: 用设置的的转换表(不同Unicode码点之间的转换关系)转换字符串
-
is*: 判断字符串是否满足指定条件, 如isalnum, isalpha, islower等
字典
表示方式:
>>> age = {'Alice':20, 'Bob':32}
>>> age
{'Alice': 20, 'Bob': 32}
可以用函数dict从其他映射或键-值对序列创建字典:
>>> items = [['name', 'Alice'], ['age', 20]]
>>> d = dict(items)
>>> d
{'name': 'Alice', 'age': 20}
还可以用关键字实参调用dict()
>>> d = dict(name='Alice', age=20)
>>> d
{'name': 'Alice', 'age': 20}
键必须是不可修改的类型(即hashable的, 元组, 字符串, 数值等)
基本操作
- len(d): 字典d的项数
- d[k]
- d[k] = v
- del d[k]
- k in d: 查找键是否存在
字典方法(P58)
-
clear
-
copy(浅赋值, 要使用深复制, 应使用copy模块中的deepcopy)
-
fromkeys: 创建一个字典, 包含指定的键, 所有键对应的值都是None({}.formkeys([…]), dict.formkeys([…]])
-
get: 安全的访问字典项, 当项不存在的时候返回None(或自己指定的值)
-
items: 返回一个列表(dict_items类型), 每个元素都为(key, value)形式, 包含字典所有项
-
keys: 类似items, 但返回的列表只包含键
-
value: 同上, 返回的列表只包含值
-
pop: 返回指定键对应的值, 并删除该项
-
popitem: 随机弹出一个字典项
-
setdefault: 类似get, 但但键不存在的时候, 添加指定的项:
>>> d={} >>> d.setdefault('name', 'n/a') 'n/a' >>> d['name'] 'n/a' >>> d.setdefault('name', 't') 'n/a'
-
update: 用另一个字典中的项更新字典
>>> d1 {0: 0, 1: 2, 2: 4} >>> d2 {1: 3, 2: 6, 3: 9} >>> d1.update(d2) >>> d1 {0: 0, 1: 3, 2: 6, 3: 9}