2017-03-06 68 views
0

Python提供了列表切片功能,但对于这个 问题,您将实现能够生产 列表切片(你自己的功能注:你不能在你的 解决方案使用切片运算符)。该功能应该被称为slice,并采取以下 三个输入在这个特定的顺序:列表分片,而无需使用切片功能

  1. 名单,source,这片将被创建。这个列表不能被你的函数修改。
  2. 一个正整数,start,表示您要创建的切片的起始索引。如果这个值不在[0, len(list)-1]的范围内,你的函数应该返回一个空列表。
  3. 一个正整数,end,表示您将创建的切片的结束索引。如果这个值不在[start, len(list)-1]的范围内,你的函数应该返回一个空列表。

如果 参数值是可以接受的,你的函数将返回 包含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)) 
+4

您的作业说明中没有提及采取用户输入。或者至少,我相当肯定你的功能应该把这些作为参数*。 –

+0

@ juanpa.arrivillaga该列表必须从用户处获得,并且不能由该功能操作或更改。 1 - 将从中创建切片的列表,来源。这个列表不能被你的函数修改。 – sal

+0

您的解决方案对我来说很好。你尝试过吗?为了补充juanpa所说的话,函数不应该要求参数。它应该是这样的:def slice(List,start,end):'这种方式应该被声明。 –

回答

0

我不知道该列表输入应该如何划定,所以我不打算把它列入我的回答。事实上,我只是假设我们已经以某种方式从用户那里收到了适当格式的列表,并且只需要调用该列表上的函数。

您的功能需要3个参数start,endlist本身,因为这些参数是切片任务的最低要求。

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 
+0

明白了,谢谢 – sal