Python学习笔记——序列

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 缺省索引

索引 startstop 可以省略,若省略,则默认传入序列的起始位置或结束位置

# 原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]

持续更新中……

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值