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

次の 2 行を削除するだけです。

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

max(items) を使用するだけです。

Python の範囲は「半開き」です。[start:end] 構文を使用して Python でリストをスライスすると、開始が含まれ、終了が省略されます。

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

現在の制限の 1 つは、開始、終了、ステップに負の値を使用できないことです。

于 2010-10-12T06:27:32.353 に答える