Python学习笔记——序列
文章目录
1. 列表连接方式
1.1 通过“+” 号连接 (创建新的对象,并需要复制对象)
[1, None, True] + ['abc', (2, 3), 4]
Out[3]: [1, None, True, 'abc', (2, 3), 4]
1.2 通过 extend 方式连接 (将元素添加到原有列表)
x = [1, None, True]
x.extend(['abc', (2, 3), 4])
x
Out[6]: [1, None, True, 'abc', (2, 3), 4]
比较
- 通过 + 号连接列表需要相对更高的代价,因为在连接过程中创建了新列表,并还需要复制对象。当需要构建一个大型列表时,这种代价将更明显。
# 较好的方式
everything = []
for chunk in list_of_lists:
everything.extend(chunk)
# 较高代价的方式
everything = []
for chunk in list_of_lists:
everything = everything + chunk
2. 切片
2.1 基本形式 start: end
使用切片符号(切片符号为:[])可以对大多数序列类型选取其子集
seq = [7, 2, 3, 7, 5, 6, 0, 1]
seq[1:5]
Out[8]: [2, 3, 7, 5]
2.2 切片赋值
# 原seq [7, 2, 3, 7, 5, 6, 0, 1]
seq[3:4] = [6, 3]
seq
Out[10]: [7, 2, 3, 6, 3, 5, 6, 0, 1]
2.3 缺省索引
索引 start 与 stop 可以省略,若省略,则默认传入序列的起始位置或结束位置
# 原seq [7, 2, 3, 6, 3, 5, 6, 0, 1]
seq[:5]
Out[14]: [7, 2, 3, 6, 3]
2.4 负索引
负索引可以从序列的尾部进行索引
# 原seq [7, 2, 3, 6, 3, 5, 6, 0, 1]
seq[-4:]
Out[15]: [5, 6, 0, 1]
2.5 步进值
通过设置步进值(在第二个冒号后)x可以达到每隔x个数取一个值:
# 原seq [7, 2, 3, 6, 3, 5, 6, 0, 1]
seq[::2]
Out[16]: [7, 3, 3, 6, 1]
2.6 骚操作(操作很骚,划重点)
如果需要得到翻转后的序列,可以设置步进值为 -1
# 原seq [7, 2, 3, 6, 3, 5, 6, 0, 1]
seq[::-1]
Out[17]: [1, 0, 6, 5, 3, 6, 3, 2, 7]
3. 内建函数
3.1 enumerate
返回序列的 (i, value) 元组,其中 i 为元素索引, value 为元素值
# 原seq [7, 2, 3, 6, 3, 5, 6, 0, 1]
for i, value in enumerate(seq):
print(i, value)
0 7
1 2
2 3
3 6
4 3
5 5
6 6
7 0
8 1
3.2 sorted
返回一个根据任意序列中元素新建的已排序列表
# 原seq [7, 2, 3, 6, 3, 5, 6, 0, 1]
sorted(seq)
Out[19]: [0, 1, 2, 3, 3, 5, 6, 6, 7]
3.3 zip
zip 将列表、元组或其他序列的元素配对,新建一个元组构成的列表:
seq1 = ['foo', 'bar', 'baz']
seq2 = ['one', 'two', 'three']
zipped = zip(seq1, seq2)
list(zipped)
Out[25]: [('foo', 'one'), ('bar', 'two'), ('baz', 'three')]
配对的序列长度可任意,生成的列表长度由最短的序列决定
给定一个已 “配对” 序列时,zip函数可 “拆分” 序列, (配合解包操作)
骚操作,骚操作,骚操作!!!
pitchers = [('Nolan', 'Ryan'), ('Roger', 'Clemens'), ('Schulling', 'Curt')]
first_names, last_names = zip(*pitchers)
first_names
Out[28]: ('Nolan', 'Roger', 'Schulling')
last_names
Out[29]: ('Ryan', 'Clemens', 'Curt')
*用在序列之前是 对序列进行解包然后传递给多个单变量参数
上述过程等价于:
a = (‘Nolan’, ‘Ryan’)
b = (‘Roger’, ‘Clemens’)
c = (‘Schulling’, ‘Curt’)
first_names, last_names = zip(a, b, c)
3.4 reversed
将序列倒序排列
# 原seq [7, 2, 3, 6, 3, 5, 6, 0, 1]
list(reversed(seq))
Out[34]: [1, 0, 6, 5, 3, 6, 3, 2, 7]
持续更新中……