跳转至

通过*解包捕获多个元素,而不是切片

有一个列表, [1, 2, 3, 4, 5], 如何分别获取其中某一段的元素?

利用星号表达式解包

获取中间多个元素

Python
1
2
3
4
5
6
7
>>> a, *b, c = [1, 2, 3, 4, 5]
>>> a
1
>>> b
[2, 3, 4]
>>> c
5

获取开头多个元素

Python
1
2
3
4
5
6
7
>>> *a, b, c = [1, 2, 3, 4, 5]
>>> a
[1, 2, 3]
>>> b
4
>>> c
5

获取结尾多个元素

Python
1
2
3
4
5
6
7
>>> a, b, *c = [1, 2, 3, 4, 5]
>>> a
1
>>> b
2
>>> c
[3, 4, 5]

获取 CSV 文件的头和剩余行

Python
it = generate_csv()
header, *rows = it

注意

  1. 使用*解包时,至少需要一个普通的接收变量和它匹配(可以是_),否则会报错。示例错误代码: *a = [1, 2, 3]
  2. 使用*解包时,同一级的*只能有一个,否则会报错。示例错误代码: a, *b, *c = [1, 2, 3, 4, 5]

参考

  • Effective Python 第13条 通过带星号的 unpacking 操作来捕获多个元素,不要用切片