我试图最大限度地简化这个功能,我该怎么办?
def eleMax(items, start=0, end=None):
if end is None:
end = len(items)
return max(items[start:end])
我虽然
def eleMax(items, start=0, end=-1):
return max(items[start:end])
但是从列表中删除了最后一个元素。
感谢您的帮助。
答案 0 :(得分:4)
您可以删除这两行:
if end is None:
end = len(items)
该功能将完全相同:
>>> a=[5,4,3,2,1]
>>> def eleMax(items, start=0, end=None):
... return max(items[start:end])
...
>>> eleMax(a,2) # a[2:] == [3,2,1]
3
答案 1 :(得分:2)
只需使用max(items)。
Python范围是“半开放”。使用[start:end]语法在Python中对列表进行切片时,将包含start,并省略结束。
答案 2 :(得分:2)
def eleMax(items, start=None, end=None):
return max(items[slice(start, end)])
答案 3 :(得分:1)
当操作大型列表或多次调用时,可以避免创建新列表和复制指针的切片开销。
http://docs.python.org/library/itertools.html#itertools.islice
Itertools包含islice,它允许在列表上迭代而不实际返回切片的新列表。
from itertools import islice
def eleMax(items, start=None, end=None):
return max(itertools.islice(items, start, end))
目前的一个限制是开始,结束,步骤不允许使用负值。