切片
# 切片
切片也是一个 Python 的高级特性,实际开发中经常会用到。
# 正向范围取值
# 关键点
- 首位下标是
0
- 前闭后开:第一个数字是起始下标,第二个数字是结束下标(但最终结果不包含它)
# 代码示例
下面以字符串为例,数组同理。
# 正向范围取值 - 字符串
strs ="image.baidu.com"
print(strs[0:1]) # i
print(strs[0:10]) # image.baid
print(strs[5:10]) # .baid
# 如果字符串总长度比较小,会取到最后一个结束就结束了
print(strs[5:100]) # .baidu.com
# 相同数字返回空
print(strs[5:5])
# 第二个数字比第一个数字小,返回空
print(strs[5:4])
# 从第 0 个下班开始取值,取后面所有元素
print(strs[0:]) # image.baidu.com
# 取前面 10 个元素
print(strs[:10]) # image.baid
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 反向范围取值
# 关键点
- 因为是反向,所以倒数的下标从
-1
算起 - 前闭后开:第一个数字是起始下标,第二个数字是结束下标(但最终结果不包含它)
- 第一个数字是负数情况下,第二个数字最大是
-1
,如果写成0
会返回空值
# 代码示例
下面以字符串为例,数组同理。
# 反向范围取值 - 字符串
strs = "image.baidu.com"
# 取最后 10 个元素
print(strs[-10:]) # .baidu.com
# 从倒数第 5 个元素取到倒数第 2 个元素
print(strs[-5:-1]) # u.co
# 从倒数第 10 个元素取到倒数第 6 个元素
print(strs[-10:-5]) # .baid
# 第二个值写 0,返回空值
print(strs[-10:0])
# 正数 + 负数组合,表示从正数索引开始取到倒数第 N 个元素的前一个元素(倒数的索引从 -1 开始计数)
print(strs[1:-5]) # mage.baid
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 复制对象
# 关键点
- 使用
[:]
可以复制对象 - 等同于浅拷贝,对可变对象是生效的
# 代码示例
字符串:
str1 = "abcd"
str2 = str1
str1 = "abc"
print(str1, str2, id(str1), id(str2))
# 输出结果
abc abcd 140171144697840 140171143901616
str1 = "abcd"
str2 = str1[:]
str1 = "abc"
print(str1, str2, id(str1), id(str2))
# 输出结果
abc abcd 140506105735152 140506104938928
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
数组:
arr1 = [1, 2, 3, 4, 5]
arr2 = arr1
arr1.append(6)
print(arr1, arr2, id(arr1), id(arr2))
# 输出结果
[1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6] 139869821785536 139869821785536
arr1 = [1, 2, 3, 4, 5]
arr2 = arr1[:]
arr1.append(6)
print(arr1, arr2, id(arr1), id(arr2))
# 输出结果
[1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5] 139891489719744 139891489734016
arr1 = [1, 2, 3, 4, 5, [1, 2, 3]]
arr2 = arr1
arr1[5].append(4)
print(arr1, arr2, id(arr1), id(arr2))
# 输出结果
[1, 2, 3, 4, 5, [1, 2, 3, 4]] [1, 2, 3, 4, 5, [1, 2, 3, 4]] 140057171381696 140057171381696
arr1 = [1, 2, 3, 4, 5, [1, 2, 3]]
arr2 = arr1[:]
arr1[5].append(4)
print(arr1, arr2, id(arr1), id(arr2))
# 输出结果
[1, 2, 3, 4, 5, [1, 2, 3, 4]] [1, 2, 3, 4, 5, [1, 2, 3, 4]] 139836932160960 139836931269248
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 步进
# 代码示例
字符串:
strs = "image.baidu.com"
# 取最后 10 个元素,每 2 个取 1 个
print(strs[-10::2]) # .ad.o
# 取第 0 到 10 的元素,每 5 个取 1 个
print(strs[0:10:5]) # i.
print(strs[::]) # image.baidu.com
# 倒序
print(strs[::-1]) # moc.udiab.egami
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
数组:
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 取全部元素,每 3 个 取 1 个
print(arr[::3]) # [1, 4, 7, 10]
# 倒序
print(arr[::-1]) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
1
2
3
4
5
6
2
3
4
5
6
(完)