我试图最大限度地简化这个功能,我该怎么办?
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])
但最后一个元素从列表中删除。
您可以删除这两行:
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
只需使用最大(项目)。
Python 范围是“半开”的。当您在 Python 中使用 [start:end] 语法对列表进行切片时,会包含开头而省略结尾。
def eleMax(items, start=None, end=None):
return max(items[slice(start, end)])
当操作大型列表或多次调用时,您可以避免切片创建新列表和复制指针的开销。
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))
当前的一个限制是 start、end、step 不允许使用负值。