说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 的内置序列都支持 index() 方法,它可以传入一个元素,从而计算这个元素值在序列中首次出现的索引值,索引从 0 开始。在有些类型中可选搜索的开始与结束位置。
以下是一些使用方法:
# 字符串
'hello'.index('l')
# 2
'hello'.index('l', 3)
# 3
'hello'.index('l', 0, 2)
# ValueError: substring not found
# 列表
list('hello').index('l')
# 2
[1, 2, 1, 2, 3].index(2, 2, 5)
# 3
[1, 1, 2, 3, 5].index(6)
# ValueError: 6 is not in list
# 元组
tuple('hello').index('l')
# 2
('a', 'b', 'c').index('a', 1)
# ValueError: tuple.index(x): x not in tuple
# range
range(3).index(1)
# 1
range(1, 10).index(10)
# ValueError: 10 is not in range
# 字节串
b'abcabc'.index(b'a')
# 0
b'abcabc'.index(b'a', 3)
# 3
# bytearray
bytearray(b'abcabc').index(b'a')
# 0
bytearray(b'abcabc').index(b'a', 2, 4)
# 3
要注意辨析下边的操作:
foo = ['a', ('a', 'b'), ('a', 'b'), [3, 4]]
foo.index('a') # 0
foo.index(('a', 'b'), 2) # 2
foo.index([3, 4]) # 3
bar = ['2', 2, '1', 1]
bar.index(1) # 3
bar.index(2) # 1
(111, 11, 1).index(1) # 2
('aa', 'aaa', 'a').index('a') # 2
(False, False, True).index(1) # 2
(True, False, True).index(True) # 0
不同序列类型的 index() 语法:
s.index(x) # 通用语法
str.index(sub[, start[, end]]) # 字符串
list.index(x[, start[, end]]) # 列表
tuple.index(x[, start[, end]]) # 元组
range.index(x) # 等差数列
bytes.index(sub[, start[, end]]) # 字节串
bytearray.index(sub[, start[, end]])# 字节数组
会返回指定元素值 x/sub 的序列中首次出现的索引,它是一个从 0 开始的整数。 要查询的内容可以是一个任意的对象。
其中,字符串、列表、元组、字节串和字节数组支持可选搜索的开始(包含)与结束索引(不包含)位置,索引是从 0 开始的。也可只给出开始索引位,包含此索引开始右(后)边的所有内容。虽然查询的是这个开始和结束的区间,但元素在序列中的索引是不变的。因此如果序列中有多个此元素,选择不同的区间可能会得到不同的索引值。
我们让 count() 方法返回序列中第一个值为 x 的元素的零基索引,当未找到指定元素时,触发 ValueError 异常。
可选参数 start 和 end 是切片符号,用于将搜索限制为列表的特定子序列。返回的索引是相对于整个序列的开始计算的,而不是 start 参数。
列表和元组的 stop 默认值是 9223372036854775807。
要注意的是,迭代器和生成器数据没有进行消费,是无法取索引的。
由于在使用序列的 index() 方法时,当未找到指定元素时,触发 ValueError 异常。我们怎么处理这个异常呢?
foo = ['2', 2, '1', 1]
try:
i = foo.index(4)
except ValueError:
i = 0
i
# 0
foo.index(4)
可以用 try 语句进行捕获。
index 的方法主要是查找序列中指定元素的位置,有需要的话可以是不是在第一位(返回是否为 0),是不是在最后一位(索引是不是其长度+1)。
或者在一个序列的部分区间里的位置,但如果要判断序列里有无此元素最好用 in 操作。
更新时间:2022-05-24 16:16:53 标签:python index 索引 序列