[英]Create a list of multiples of a number
問題:
倍數列表
創建一個 Python 3 函數,該函數接受兩個數字(值、長度)作為參數並返回值的倍數列表,直到列表的大小達到長度為止。
例子
list_of_multiples(value=7, length=5)
➞[7, 14, 21, 28, 35]
list_of_multiples(value=12, length=10)
➞[12, 24, 36, 48, 60, 72, 84, 96, 108, 120]
list_of_multiples(value=17, length=6)
➞[17, 34, 51, 68, 85, 102]
def multiples (value,length):
"""
Value is number to be multiply
length is maximum number of iteration up to
which multiple required.
"""
for i in range(length):
out=i
return i
最 Pythonic 的方式
def multiples(value, length):
return [*range(value, length*value+1, value)]
print(multiples(7, 5))
# [7, 14, 21, 28, 35]
print(multiples(12, 10))
# [12, 24, 36, 48, 60, 72, 84, 96, 108, 120]
print(multiples(17, 6))
# [17, 34, 51, 68, 85, 102]
Pythonic方式:
def multiples(value, length):
return [value * i for i in range(1, length + 1)]
print(multiples(7, 5))
# [7, 14, 21, 28, 35]
print(multiples(12, 10))
# [12, 24, 36, 48, 60, 72, 84, 96, 108, 120]
print(multiples(17, 6))
# [17, 34, 51, 68, 85, 102]
def multiples(value, length): list_multiples = [] i = 0 while i < length: list_multiples.append(value*(i+1)) i+=1 return list_multiples
Nite Block給出了小length
值 (< 100) 的最佳答案。
但是,如果length
變大,使用 numpy 比 python 循環要快得多:
numpy.arange(1, length+1) * value
長度為 1000 時,python 循環的時間幾乎是 numpy 的 4 倍。 見下面的代碼:
import timeit
testcode_numpy = '''
import numpy
def multiples_numpy(value, length):
return numpy.arange(1, length+1) * value
multiples_numpy(5, 1000)
'''
testcode = '''
def multiples(value, length):
return [*range(value, length*value+1, value)]
multiples(5, 1000)
'''
print(timeit.timeit(testcode_numpy))
print(timeit.timeit(testcode))
# Result:
# without numpy: 9.7 s
# with numpy: 2.4 s
簡單/不在線的方式是:
def multiples(value, length):
l = []
for i in range(1, length+1):
l.append(value*i)
return l
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.