Python按变量切片,最后一个索引

2024-04-18 13:15:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,它应该返回包含片[a,b]中列表中的元素。 如果a和b都是已知的,那么这是一个不需要考虑的问题:

def my_slice(some_list, a, b):
    return some_list[a:b+1]

但是,有时用户可能需要[a,final\u index]或[0,b]或[0,final\u index]范围内的元素。 天真地说,您可能只是向参数添加默认值

def my_slice(some_list, a=0, b=-1):
    return some_list[a:b+1]

但这将失败

>>> li = range(5)
>>> my_slice(li)
[]

因为这与li[0:0]相同,当然是一个空列表。你知道吗

我能做到

def my_slice(some_list, a=0, b=-1):
    return some_list[a:] if b==-1 else some_list[a:b+1]

但我很好奇是否还有别的办法。你知道吗


Tags: 函数用户元素列表参数indexreturnmy
3条回答

您可以使用None包含最后一个位置,但是您需要检查您没有负的步骤。你知道吗

i=None
print("abcd"[-2:i])

将屈服

cd

怎么样

def my_slice(some_list, a=0, b=-1):
    if some_list:
        return some_list[a:b] + [some_list[b]]
    else:
        return some_list

我认为这应该涵盖所有情况:

>>> my_slice([1,2,3,4])
[1, 2, 3, 4]
>>> my_slice([1,2,3,4], 1,2)
[2, 3]
>>> my_slice([1,2,3,4], 1,3)
[2, 3, 4]
>>> my_slice([1,2,3,4], b=1)
[1, 2]
>>> my_slice([1,2,3,4], a=2)
[3, 4]
>>> my_slice([])
[]

我不确定您希望如何处理扩展列表边界的切片-忽略它们或引发错误?你知道吗

你总是要测试参数b。我会做:

def my_slice(some_list, a=0, b=None):

  return some_list[a:b+1] if b else some_list[a:]

相关问题 更多 >