Python中的通用序列操作
Python中有六种内置序列,三种基本类型序列操作比较常见:列表、元组、字符串
大部分序列可以进行通用操作,包括索引、切片、相同类型序列相加,乘法、成员资格、长度、最大值和最小值
索引
python中的索引从0开始计数,可以从右向左,也可以从左向右
从左向右
x1 = [1, 2, 3, 4]
x2 = (1, 2, 3, 4)
x3 = "hello"
print(x1[0])
print(x2[0])
print(x3[0])
结果:
1
1
h
从右向左
从右向左是因为python索引支持负值
x1 = [1, 2, 3, 4]
x2 = (1, 2, 3, 4)
x3 = "hello"
print(x1[-1])
print(x2[-1])
print(x3[-1])
4
4
o
切片
python中的所有序列类型都可以进行切片操作
记切片的参数为[a,b,c],则a是切片第一个参数,默认为0,b是切片第二个参数,默认为序列的最后,c为步长(每次跳跃的个数)默认为1
x1 = [1, 2, 3, 4]
print(x1[0:3]) # [1, 2, 3]
print(x1[2:3]) # [3]
# a为默认
print(x1[:3]) # [1, 2, 3]
# b为默认
print(x1[0:]) # [1, 2, 3, 4]
# a,b都为默认
print(x1[:]) # [1, 2, 3, 4]
# 说明c默认为1
print(x1[0:4]) # [1, 2, 3, 4]
print(x1[0:4:1]) # [1, 2, 3, 4]
print(x1[0:4:2]) # [1, 3]
# 说明负值情况
print(x1[-3:3]) # [2, 3]
print(x1[2::-1]) # [3, 2, 1]
注意:
- 步长c不支持为0
- 正数步长从序列头部开始从左往右获取元素,负数相反,从右向左
- 正数步长开始点必须小于结束点,负数步长开始点必须大于结束点
序列相加
可以使用+
做连接,必须是同类型的序列才能相加
x1 = [1, 2, 3, ] + [4, 5, 6, 7]
x2 = (1, 2, 3,) + (4, 5, 6, 7)
x3 = "123" + "4567"
print(x1) # [1, 2, 3, 4, 5, 6, 7]
print(x2) # (1, 2, 3, 4, 5, 6, 7)
print(x3) # 1234567
(1, 2, 3,) + [4, 5, 6, 7] # 错误
# Traceback (most recent call last):
# File "E:\main.py", line 8, in <module>
# (1, 2, 3,) + [4, 5, 6, 7] # 错误
# TypeError: can only concatenate tuple (not "list") to tuple
序列重复
可以用*
做重复
x1 = [1, 2, 3] * 3
x2 = (1, 2, 3) * 3
x3 = '123' * 3
print(x1) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
print(x2) # (1, 2, 3, 1, 2, 3, 1, 2, 3)
print(x3) # 123123123
成员资格
用in
运算符判断是否在序列中,是返回True,不是返回False
x1 = [1, 2, 3]
x2 = (1, 2, 3)
print(5 in x1) # False
print(2 in x1) # True
注意:
in
操作符的右边是字符,左边也要是字符,但是()in [] 是OK的,eg:
print(5 in "123456")
# Traceback (most recent call last):
# File "E:\main.py", line 7, in <module>
# print(5 in "123456")
# TypeError: 'in <string>' requires string as left operand, not int
print((2) in [1, 2, 3]) # True
最大最小值求和
x1 = [1, 2, 3, 4, 5, 6]
print("序列长度", len(x1)) # 序列长度 6
print("最小值", min(x1)) # 最小值 1
print("最大值", max(x1)) # 最大值 6
print("求和", sum(x1)) # 求和 21