2010-10-08 123 views
2

我想尽量简化这个功能,我该怎么办?如何在Python中返回列表的最大元素?

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

这对于'max(items)'来说真的很奇怪。如果你需要切片'MAX(项目[开始:结束])'或'甚至最大(项目[开始:])'作品。 – 2010-10-08 17:45:09

+0

是的,你是对的,但它只是exercice :) – Natim 2010-10-08 18:04:40

+0

如果是家庭作业,请注明与[功课] – 2010-10-08 22:49:56

回答

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

如果非要计算出有多少次这样的最大值发生在给定的列表切片?那么如果我们有最长的切片范围,如何以优化的方式做到这一点 – 2015-08-15 15:52:52

2

只需使用最大(项目)。

Python范围是'半开放'。当用[start:end]语法在Python中对列表进行切片时,将包含开始并省略结束。

2
def eleMax(items, start=None, end=None): 
    return max(items[slice(start, end)]) 
+0

也很有趣:) – Natim 2010-10-08 18:05:08

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

一个当前的限制是负值不允许用于开始,结束,步骤。

相关问题