not nums
最初に確認する必要があります。for
そして、ループは必要ありません。
これは(あなたのコードのように) を明示的にチェックせず、この状況max(nums) == n
で戻ることに注意してくださいFalse
(これは と呼ばれる関数の正しい動作だと思いますgt()
)
def gt(nums, n):
if not nums:
return False
return max(nums) > n
編集:いくつかのタイミング (Python 2.7.3):
>>> import timeit
>>> all = """l = list(range(100))
... rl = list(reversed(range(100)))
... """
>>> tim = all + """def gt(nums, n):
... if not nums:
... return False
... return max(nums) > n"""
>>> gnibbler = all + """def gt(nums, n):
... return any(x>n for x in nums)"""
>>> burhan = all + """def gt(nums, n):
... return max(nums) > n if nums else False"""
>>> # Test with the condition being False:
... timeit.timeit(setup=tim, stmt="gt(l, 100)")
3.011574096311698
>>> timeit.timeit(setup=gnibbler, stmt="gt(l, 100)")
8.00847921677337
>>> timeit.timeit(setup=burhan, stmt="gt(l, 100)")
2.9805757305956178
>>> timeit.timeit(setup=tim, stmt="gt(rl, 100)")
2.8600606448831307
>>> timeit.timeit(setup=gnibbler, stmt="gt(l, 100)")
7.997938412127745
>>> timeit.timeit(setup=burhan, stmt="gt(l, 100)")
3.032805185133668
>>> # Now what if the condition is True?
... timeit.timeit(setup=tim, stmt="gt(l, 98)")
2.98623750798793
>>> timeit.timeit(setup=gnibbler, stmt="gt(l, 98)")
8.265056412191534
>>> timeit.timeit(setup=burhan, stmt="gt(l, 98)")
2.9731271156252888
>>> timeit.timeit(setup=tim, stmt="gt(rl, 98)")
2.8777295865334764
>>> timeit.timeit(setup=gnibbler, stmt="gt(rl, 98)")
1.0481696827076092
>>> timeit.timeit(setup=burhan, stmt="gt(rl, 98)")
2.8776150752220246
したがって、Burhan のソリューションと私のソリューションは速度の点で同等であり (まったく同じことを行うため、それほど驚くべきことではありません。私のソリューションはもう少し冗長です)、リストが十分に長い場合にのみ、gnibbler のソリューションの方が著しく高速です (以前のソリューションは削除しました)。リストに含まれる項目が 10 個しかない場合は常に遅くなるタイミング)、条件が に評価さTrue
れ 、リストの非常に早い段階で検索値に到達します。そうしないと、すべての Python レベルの比較が大幅に遅くなります。