如何获取Python列表切片操作所选中的索引?
问题:从slice对象提取对应列表的具体索引
给定列表:
things = ["a", "b", "c", "d", "e", "f"]
以及一个作用于该列表的slice对象:
s = slice(-2, None, None)
已知things[-2:]会得到['e', 'f'],现在需要提取该切片对应的具体索引,期望结果是[4, 5]。
当前实现方式:
print([i for i in range(len(things))][s]) # [4, 5]
请问有没有更Pythonic的实现方式?
更Pythonic的实现方式
可以利用slice对象自带的indices()方法——它会根据序列的长度,将切片的start、stop、step转换为有效的正整数索引,返回一个三元组(start, stop, step)。之后直接用range()生成对应的索引即可:
things = ["a", "b", "c", "d", "e", "f"] s = slice(-2, None, None) # 获取切片对应的有效起始、结束、步长 start, stop, step = s.indices(len(things)) # 生成索引列表 target_indices = list(range(start, stop, step)) print(target_indices) # 输出: [4, 5]
这种方式的优势在于:
- 更高效:无需先生成完整的索引列表再切片,避免了不必要的内存开销
- 更符合Python惯用写法:直接利用slice对象的内置方法处理索引转换,逻辑更清晰
内容的提问来源于stack exchange,提问作者Krishnan Shankar
相关产品推荐
相关产品推荐

