上一篇
Python索引基础概念
在Python中,索引是访问序列类型(如列表、字符串、元组)中元素的主要方式。Python支持两种索引方式:顺序索引(正索引)和倒序索引(负索引)。
顺序索引
'A'0
'B'
1
1
'C'
2
2
'D'
3
3
'E'
4
4
倒序索引
'A'-5
'B'
-4
-4
'C'
-3
-3
'D'
-2
-2
'E'
-1
-1
顺序索引从0开始,从左向右递增;倒序索引从-1开始,从右向左递减。
顺序索引详解
顺序索引是最常用的索引方式,从0开始表示第一个元素,依次递增。
# 创建一个列表
fruits = ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry']
# 顺序索引访问
print(fruits[0]) # 输出: Apple (第一个元素)
print(fruits[2]) # 输出: Cherry (第三个元素)
print(fruits[4]) # 输出: Elderberry (最后一个元素)
fruits = ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry']
# 顺序索引访问
print(fruits[0]) # 输出: Apple (第一个元素)
print(fruits[2]) # 输出: Cherry (第三个元素)
print(fruits[4]) # 输出: Elderberry (最后一个元素)
注意: 如果使用超出列表长度的顺序索引,Python将抛出IndexError异常。
倒序索引详解
倒序索引提供从右向左访问元素的方式,-1表示最后一个元素,-2表示倒数第二个,以此类推。
# 使用倒序索引
print(fruits[-1]) # 输出: Elderberry (最后一个元素)
print(fruits[-3]) # 输出: Cherry (第三个元素从右数)
print(fruits[-5]) # 输出: Apple (第一个元素)
print(fruits[-1]) # 输出: Elderberry (最后一个元素)
print(fruits[-3]) # 输出: Cherry (第三个元素从右数)
print(fruits[-5]) # 输出: Apple (第一个元素)
何时使用倒序索引
- 访问序列末尾的元素
- 不需要知道序列长度就能访问最后一个元素
- 与顺序索引结合进行切片操作
倒序索引优势
- 简化末尾元素的访问
- 使代码更清晰易读
- 处理动态长度序列时更安全
切片操作:顺序与倒序结合
Python切片使用[start:stop:step]语法,可以灵活结合顺序和倒序索引。
# 基本切片操作
print(fruits[1:4]) # 输出: ['Banana', 'Cherry', 'Date']
# 包含步长的切片
print(fruits[0:5:2]) # 输出: ['Apple', 'Cherry', 'Elderberry']
# 倒序索引切片
print(fruits[-3:-1]) # 输出: ['Cherry', 'Date']
# 混合索引切片
print(fruits[1:-1]) # 输出: ['Banana', 'Cherry', 'Date']
print(fruits[1:4]) # 输出: ['Banana', 'Cherry', 'Date']
# 包含步长的切片
print(fruits[0:5:2]) # 输出: ['Apple', 'Cherry', 'Elderberry']
# 倒序索引切片
print(fruits[-3:-1]) # 输出: ['Cherry', 'Date']
# 混合索引切片
print(fruits[1:-1]) # 输出: ['Banana', 'Cherry', 'Date']
反转序列的高级技巧
Python提供了多种反转序列的方法,适用于不同场景:
# 方法1:使用切片反转
reversed_fruits = fruits[::-1]
print(reversed_fruits) # 输出: ['Elderberry', 'Date', 'Cherry', 'Banana', 'Apple']
# 方法2:使用reversed()函数
reversed_fruits2 = list(reversed(fruits))
print(reversed_fruits2) # 输出同上
# 方法3:使用列表的reverse()方法 (原地修改)
fruits_copy = fruits.copy()
fruits_copy.reverse()
print(fruits_copy) # 输出同上
reversed_fruits = fruits[::-1]
print(reversed_fruits) # 输出: ['Elderberry', 'Date', 'Cherry', 'Banana', 'Apple']
# 方法2:使用reversed()函数
reversed_fruits2 = list(reversed(fruits))
print(reversed_fruits2) # 输出同上
# 方法3:使用列表的reverse()方法 (原地修改)
fruits_copy = fruits.copy()
fruits_copy.reverse()
print(fruits_copy) # 输出同上
不同反转方法对比
- 切片[::-1]:简洁高效,创建新列表
- reversed()函数:返回迭代器,适用于大型序列
- reverse()方法:原地反转,不创建新列表
高级应用场景
1. 字符串反转
text = "Hello, Python!"
reversed_text = text[::-1]
print(reversed_text) # 输出: "!nohtyP ,olleH"
reversed_text = text[::-1]
print(reversed_text) # 输出: "!nohtyP ,olleH"
2. 提取文件扩展名
filename = "documentation.txt"
# 使用负索引查找最后一个点号的位置
extension = filename[filename.rfind('.')+1:]
print(extension) # 输出: "txt"
# 使用负索引查找最后一个点号的位置
extension = filename[filename.rfind('.')+1:]
print(extension) # 输出: "txt"
3. 回文检测
def is_palindrome(s):
return s == s[::-1]
print(is_palindrome("radar")) # True
print(is_palindrome("python")) # False
return s == s[::-1]
print(is_palindrome("radar")) # True
print(is_palindrome("python")) # False
发表评论