我试图在python中创建一个从1到指定数字的序列号列表,但需要将数字四舍五入为可被10整除的数字。
e.g。如果我的指定号码为7
,我的列表将为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
我已经编写了以下代码,它确实有效,但我不确定这是否是最佳/最有效的编写方式,特别是如果我的数字变大了。
x = 33
i = 1
mylist = list()
while i <= x:
mylist.append(i)
i += 1
while mylist[len(mylist)-1] % 10 != 0:
mylist.append(i)
i += 1
将输出:
print mylist
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]
还有另一种更好或更有效(运行)的方式来写这个吗?
答案 0 :(得分:2)
为什么不使用简单的范围?
>>> def makeList(n):
return list(range(1,1+n if n % 10 == 0 else 1+ 10*(1+n//10)))
>>> makeList(7)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> makeList(10)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> makeList(11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
备注:在Python 2中,您可以删除list()
,因为range()
已经是一个列表(但在这种情况下,您必须确保已导入Python 3的int除法运算符{{1} })。
答案 1 :(得分:1)
def makeList(n):
return range(1, n + 11 - (n % 10))
注意到当n是10的倍数时,不需要添加10。
def makeList(n):
return range(1, n + 1 - (n % 10) + 10 * (n % 10 != 0))