在網上看到這麼一道題目,根據自己當時的想法編寫**,雖然成功實現了,但是我們可以從更多的思維角度來分析。
思路 1:
判斷 2 和 5 的個數,取當中的最小值。因為 2*5 等於 10,所以只要計算得出它們的個數最小值,就可以知道乘積結果末尾 0 的個數。
import timeit
l = [5, 8, 3, 50, 35, 230,234000,3445,7994,3444]
def get_list_zero4():
global l
num2 = 0
num5 = 0
for num in l:
while num % 2 == 0:
num = num / 2
num2 += 1
while num % 5 == 0:
num = num / 5
num5 += 1
return min(num2,num5)
if __name__ == '__main__':
tt4 = timeit.repeat("get_list_zero4()", setup="from __main__ import get_list_zero4", number=10000)
print(min(tt4))
輸出結果為:
0.04166272500000012
思路2:
計算列表中末尾是 5 和 0 的個數。
import timeit
l = [5, 8, 3, 50, 35, 230,234000,3445,7994,3444]
def get_list_zero5():
global l
def func(n):
count = 0
while n%10 == 0:
count += 1
n /= 10 #python2
# n = n // 10 #python3
if n%5 == 0:
count += 1
return count
sums = 0
for x in l:
sums += func(x)
return sums
if __name__ == '__main__':
tt5 = timeit.repeat("get_list_zero5()", setup="from __main__ import get_list_zero5", number=10000)
print(min(tt5))
輸出結果為:
0.02896810400000005
思路3:
將列表中的數值計算完後判斷末尾 0 的個數。
import timeit
l = [5, 8, 3, 50, 35, 230,234000,3445,7994,3444]
def get_list_zero3():
global l
return len(str(reduce(lambda x, y:x * y, l))[::-1]) - len(str(int(str(reduce(lambda x, y:x * y, l))[::-1])))
if __name__ == '__main__':
tt3 = timeit.repeat("get_list_zero3()", setup="from __main__ import get_list_zero3", number=10000)
print(min(tt3))
輸出結果為:
0.031752234000000046
雖然該方法執行時間也短,但是沒有完全按照題目的意思。 python 數值列表 75
for value in range 1,5 print value 這裡的意思是從1列印到4.所以如果想要從1列印到5,則必須是range 1,6 如何儲存range 的值?這裡可以使用list 函式 numbers list range 1,6 print numbers 輸出結果 1,2,3,...
Python 基礎 數值列表
在前面所提的章節中,我們所提及的大多是列表中的字串的操作,那麼接下來將詳細介紹數值列表的建立和使用。數值列表即存放了一株相關的數值型元素的列表,那麼如將這一組資料放入數值列表中呢?lunm input 請輸入乙個人數值列表 請輸入乙個數值列表 1 2,3 4,5 6 lnum 1,2,3,4,5,6...
說說 Python 的數值列表
range 函式可以生成一系列的數字 for v in range 1,10 print v 複製 執行結果 range 函式會從我們所指定的第乙個值開始數,直到到達所指定的第二個值後停止,但不會包含第二個值。這就是程式語言中的差一行為。可以使用函式 list 將 range 函式的結果轉換為列表 ...