forループを使用して、Tobias の回答を拡張します。
comp = [1, 2, 3]
m = max(comp)
for index in range(len(comp)):
if comp[index] == m:
# some action
インデックスは0から始まるので、する必要はありませんlen(comp) + 1。実際の要素ではなく、ループ内でインデックスを使用することを好みforます。かなり高速になるからです。プロセス中に、特定の要素のインデックスが必要になる場合があります。次に、使用l.index(obj)は時間を無駄にします (ほんのわずかな量であっても --- 長いプロセスの場合、これは面倒になります)。
これは、すべてのプロセス ( の) が非常に似ていることも前提としていcomp[index]ます。同じプロセスですが、変数が異なります。インデックスごとに大幅に異なるプロセスがある場合、これは機能しません。
ただし、 を使用すると、すでにインデックスがあり、 (ループによって与えられるインデックスと共に)for index in range(len(l)):アイテムに簡単にアクセスできます。l[index]
奇妙なことに、Tobias の実装の方が速いようです (私はそうではないと思いました)。
comp = [1, 2, 3]
m = max(comp)
from timeit import timeit
def test1():
if comp[0] == m: return m
if comp[1] == m: return m
if comp[2] == m: return m
def test2():
for index in range(len(comp)):
if comp[index] == m: return m
print 'test1:', timeit(test1, number = 1000)
print 'test2:', timeit(test2, number = 1000)
戻り値:
test1: 0.00121262329299
test2: 0.00469034990534
私の実装は、長いリストの方が高速かもしれません (確かではありません)。ただし、そのためのコードを書くのは面倒です (繰り返しを使用する長いリストの場合if comp[n] == m)。