获取列表并返回值的函数?

时间:2014-12-08 04:47:33

标签: python list

编写一个函数slice(),它接受一个列表以及开始和结束值并返回列表的切片?

这不是硬件,但课程老师说我们应该在周末做些什么,这不是很简单吗?老师告诉我们的是不同的东西..

def slice (l, start, end):
    x = l[start:end]
    return x

3 个答案:

答案 0 :(得分:0)

您确定您的老师希望该功能采用索引而不是值吗?

如果是索引,那么您的解决方案是正确的。

如果它是值,那么快速而肮脏的方式就是:

def slice(alist, start, end):
    s = alist.index(start)
    e = alist.index(end)
    return alist[s:e+1]

你可以添加对输入的检查,如果你不想要贪婪的方法也可以修改函数,因为索引函数返回它从左边开始可以在列表中找到的第一个元素的索引(可能没有'是你想要的最终价值。)

答案 1 :(得分:0)

这里有一些不同的方法:

>>> def return_slice(l,start,end):
...     return l[slice(start,end)]
... 
>>> return_slice([1,2,3,4,5,6],2,5)
[3, 4, 5]

>>> def return_slice(l,start,end):
...     return l[start:end]
... 
>>> return_slice([1,2,3,4,5,6],2,5)
[3, 4, 5]

>>> import itertools
>>> def return_slice(l,start,end):
...     return list(itertools.islice(l,start,end))
... 
>>> return_slice([1,2,3,4,5,6],2,5)
[3, 4, 5]

>>> import operator
>>> def return_slice(l,start,end):
...     return operator.getitem(l,slice(start,end))
... 
>>> return_slice([1,2,3,4,5,6],2,5)
[3, 4, 5]

答案 2 :(得分:0)

您可以使用范围和列表理解获得非常接近的切片行为:

return [l[x] for x in range(start, end)]

这不能正确处理负指数值。

事实上,想要模拟类的Python程序不必编写函数。有一个特殊的方法名称getitem被调用来执行[]索引,它将接收一个切片对象,它将有助于将切片解码为一个范围的开始,停止和步长值。您可以在Python Language Reference

的第3章(“数据模型”)中阅读更多相关信息