Python 如何返回列表切片的最大元素

Python 如何返回列表切片的最大元素,python,max,slice,Python,Max,Slice,我试图最大限度地简化这个函数,我该怎么做 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]) 但最后一个元素将从列表中删除。只需使用max(items) 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])
但最后一个元素将从列表中删除。

只需使用max(items)


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

您只需删除以下两行:

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

当操作大型列表或多次调用时,可以避免创建新列表和复制指针的切片开销

Itertools包含islice,它允许在不实际返回切片的新列表的情况下对现有列表进行迭代

from itertools import islice

def eleMax(items, start=None, end=None):
    return max(itertools.islice(items, start, end))

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

这是一种非常非常奇怪的
max(items)
方法。如果你需要切片
max(items[start:end])
或者甚至
max(items[start:])
工作。是的,你是对的,但这只是为了练习:)如果是作业,请用[作业]标记问题这不是家庭作业,这是娱乐:)如果我必须计算这个最大值在给定的列表片段中出现了多少次?那么,如果我们有最长的片段范围,如何以优化的方式进行计算
from itertools import islice

def eleMax(items, start=None, end=None):
    return max(itertools.islice(items, start, end))