2

我试图最大限度地简化这个功能,我该怎么办?

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])

但最后一个元素从列表中删除。

4

4 回答 4

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
于 2010-10-08T17:44:35.910 回答
2

只需使用最大(项目)。

Python 范围是“半开”的。当您在 Python 中使用 [start:end] 语法对列表进行切片时,会包含开头而省略结尾。

于 2010-10-08T17:44:07.000 回答
2
def eleMax(items, start=None, end=None):
    return max(items[slice(start, end)])
于 2010-10-08T17:50:15.137 回答
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))

当前的一个限制是 start、end、step 不允许使用负值。

于 2010-10-12T06:27:32.353 回答