列表切片而不使用切片函数

时间:2017-03-06 23:01:48

标签: python list slice

  

Python为列表提供切片功能,但为此   问题,你将实现自己的能够生产的功能   列表切片(注意:你不能在你的切片操作符中使用切片操作符)   解)。该函数应调用slice并执行以下操作   这个特定顺序的三个输入:

     
      
  1. 将创建切片的列表source。您的功能无法修改此列表。
  2.   
  3. 一个正整数start,表示您将创建的切片的起始索引。如果此值不在[0, len(list)-1]范围内,则您的函数应返回一个空列表。
  4.   
  5. 一个正整数end,表示您将创建的切片的结束索引。如果此值不在[start, len(list)-1]范围内,则您的函数应返回一个空列表。
  6.         

    如果   参数值是可以接受的,您的函数将返回一个列表   包含source中从索引start开始到结尾的项目   在索引end(包括)。这与Python切片不同   运算符,因为索引end中的项目也包含在新项目中   列表。

这是我到目前为止所得到的:

    list1 = []
def slice(list1):
    list1 = list(input("enter a list"))
    emptylist = []
    st = int(input("enter start"))

    ed = int(input("enter end"))


    if ed not in range(st,len(list1)-1) or st not in range(0,len(list1)-1):
        print(emptylist)
    else:
        list2 = []

        for i in list1:
            list2.append(list1[i])
            return(list2)

print(slice(list1))

1 个答案:

答案 0 :(得分:0)

我不知道列表输入应该如何分隔,所以我不打算将它包含在我的答案中。实际上,我只是假设我们已经以某种方式从用户那里收到了正确格式的列表,只需要在该列表上调用该函数。

您的函数将使用3个参数,startendlist本身,因为这些是切片任务的最低要求。

def slice(lst, start, end):

最简单的解决方案是迭代循环并添加start:end范围内的所有元素。毕竟,您可以使用索引表示法。

首先,您必须创建一个仅包含相应元素的空列表。我们将此列表称为output列表。

output = []

然后,我们可以迭代startend之间的所有整数,因为列表索引是整数。

for i in range(start, end):
    output.append(lst[i])

在函数结束时,您需要返回output列表,以便最终获得实际切片的列表对象。

return output

全部放在一起:

# some shebangs here
'''
Some docstring here
'''
# some imports here

# receive user input. You need a list and two integers.
# lst = input()
# start = input()
# end = input()

def slice(lst, start, end):
    output = []
    if not(0 <= start < len(lst)):
        return output
    elif not(start <= end < len(lst)):
        return output
    else:
        for i in range(start, end+1):
            output.append(lst[i])
        return output

print(slice(lst, start, end))


为什么原始脚本不起作用?

您的代码问题在最后一行。如果你这样做:

for i in list1:
    list2.append(list1[i])
    return(list2)

首先,i是要迭代的元素,不是元素的索引。其次,返回终止函数,因此循环。因此,脚本不仅会给你一个IndexError,但即使你很幸运,它也会返回一个只包含一个元素的列表。您可以像这样修改它:

for i in list1:
    list2.append(i)
return list2

这可行,但现在我们忽略了startend参数。 (这就是我选择range()功能的原因)。如果你想使用Pythonic表示法,你可以通过列表枚举,检查索引,并在适当的时候附加。

for index, element in enumerate(list1):
    if start <= index <= end:
        list2.append(element)
return list2