如何检查slice对象的end值是否为指定值并修改?
问题:修改Slice对象的stop值以包含列表末尾元素
我有一个接收slice对象的函数,需要检查该slice的stop值是否为-1,若是则将其重置为None,以此避免遗漏列表最后一个元素。当前直接使用slice(1, -1)会漏掉列表末尾元素,但改成slice(1, None)就能完整获取从索引1到末尾的所有元素。
示例代码:
datalist=[None, 'Grey', 'EE20-700', 'EE-42-01', 'EE15-767', 'EE0-70650', 'B&B', 1, 1, 1, 1, 1, '300R', True, 'Nov. 2, 2022', 'Nov. 2, 2022', 1, 1, 1, True, 3] # 使用slice(1, -1)会遗漏最后一个元素 slice_dimensions=slice(1, -1) print(datalist[slice_dimensions]) # 输出: ['Grey', 'EE20-700', 'EE-42-01', 'EE15-767', 'EE0-70650', 'B&B', 1, 1, 1, 1, 1, '300R', True, 'Nov. 2, 2022', 'Nov. 2, 2022', 1, 1, 1, True] # 使用slice(1, None)可以包含最后一个元素 slice_dimensions=slice(1, None) print(datalist[slice_dimensions]) # 输出: ['Grey', 'EE20-700', 'EE-42-01', 'EE15-767', 'EE0-70650', 'B&B', 1, 1, 1, 1, 1, '300R', True, 'Nov. 2, 2022', 'Nov. 2, 2022', 1, 1, 1, True, 3]
我尝试编写函数但不知道如何获取slice的stop值,原函数如下:
def slicer(slice_dimensions): if slice_dimensions[1] == -1: # 这里不知道如何正确获取stop值 slice_dimensions= slice(1, None) data_of_interest=datalist[slice_dimensions] return(data_of_interest)
解决方案
Python的slice对象有三个公开属性:start、stop、step,对应创建slice时传入的三个参数。你可以直接通过slice_dimensions.stop获取到对应的结束值,然后进行判断和修改。
修改后的函数如下:
def slicer(slice_dimensions, datalist): # 获取原slice的三个参数 start = slice_dimensions.start stop = slice_dimensions.stop step = slice_dimensions.step # 如果stop是-1,替换为None if stop == -1: stop = None # 创建新的slice对象 adjusted_slice = slice(start, stop, step) return datalist[adjusted_slice]
测试示例
datalist=[None, 'Grey', 'EE20-700', 'EE-42-01', 'EE15-767', 'EE0-70650', 'B&B', 1, 1, 1, 1, 1, '300R', True, 'Nov. 2, 2022', 'Nov. 2, 2022', 1, 1, 1, True, 3] # 测试原slice(1, -1) result = slicer(slice(1, -1), datalist) print(result) # 输出包含最后一个元素的完整列表:['Grey', 'EE20-700', 'EE-42-01', 'EE15-767', 'EE0-70650', 'B&B', 1, 1, 1, 1, 1, '300R', True, 'Nov. 2, 2022', 'Nov. 2, 2022', 1, 1, 1, True, 3] # 测试其他slice,比如slice(2, 5) result2 = slicer(slice(2, 5), datalist) print(result2) # 输出: ['EE20-700', 'EE-42-01', 'EE15-767']
这个方案保留了原slice的start和step参数,不会硬编码start=1,适用性更广。
内容的提问来源于stack exchange,提问作者Rivered
相关产品推荐
相关产品推荐

