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