[英]Maximum and minimum of two values
我正在編寫一個將被多次調用的代碼,我想知道是否有比這更快(計算明智)的東西:
maximum = max(a, b) # a and b are integers
minimum = min(a, b)
該代碼有效,但我想一旦我調用了max
,我們就會通過調用min
以某種方式浪費計算能力。 我試圖查看 inte.net 上的問題,但我無法用語言表達它。
這更取決於數據類型a和b是什么。 如果它們是簡單類型(例如,數字),則:
if a > b:
maximum, minimum = a, b
else:
maximum, minimum = b, a
...可能比調用 min 和 max 函數更快。
或者,如果您喜歡單線:
maximum, minimum = (a, b) if a > b else (b, a)
如果您在這里擔心計算能力,那應該不是問題。 不管你需要定義兩個不同的變量,最大值和最小值,所以你這樣做的方式很好。 如果您真的不想使用 min,那么類似這樣的方法可能會起作用,但它已經比您所做的更復雜了:
if max(a, b) == a:
maximum = a
minimum = b
else:
maximum = b
minimum = a
在數學上min(a,b)
與a+b-max(a,b)
相同。 這是否是一種改進值得商榷。
我已經根據您的建議(所有非常聰明的建議,謝謝。:) 運行了這段代碼,以嘗試查看更快的速度。 差異實際上非常令人印象深刻:
import time
def whosfaster(a, b):
start_time = time.time()
maximum = max(a, b)
minimum = min(a, b)
method0 = time.time() - start_time
start_time = time.time()
if a > b:
maximum, minimum = a, b
else:
maximum, minimum = b, a
method1 = time.time() - start_time
start_time = time.time()
maximum, minimum = max(a, b), min(a, b)
method2 = time.time() - start_time
start_time = time.time()
maximum, minimum = (a, b) if a > b else (b, a)
method3 = time.time() - start_time
start_time = time.time()
if max(a, b) == a:
maximum = a
minimum = b
else:
maximum = b
minimum = a
method4 = time.time() - start_time
return maximum, minimum, method0, method1, method2, method3, method4
total = [0, 0, 0, 0, 0]
for a in range(1, 5000):
for b in range(1, 5000):
maximum, minimum, method0, method1, method2, method3, method4 = whosfaster(a, b)
total[0] += method0
total[1] += method1
total[2] += method2
total[3] += method3
total[4] += method4
print(total)
我得到的結果是:
Run number 1 :
[7.562410593032837, 2.4336302280426025, 7.17744255065918, 3.160186529159546, 5.583981037139893]
Run number 2 but my laptop was on battery saver mode :
[12.757804155349731, 4.507119178771973, 13.357162237167358, 5.251198768615723, 8.934610605239868]
如果有人想在他們的終端上運行它進行比較,歡迎您這樣做,我的筆記本電腦不是最快的!!
編輯:我真的不知道如何將 Mark Ransom 的回答付諸實踐,所以我沒有嘗試。 歡迎編輯我的帖子並更改我的代碼,如果您知道如何操作,可以在您的手上重新運行它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.