如果我必须生成自然数,我可以使用'range',如下所示:
list(range(5))
[0,1,2,3,4]
有没有办法在不使用范围函数或循环的情况下实现这一目标?
答案 0 :(得分:4)
您可以使用递归打印前n个自然数
def printNos(n):
if n > 0:
printNos(n-1)
print n
printNos(100)
答案 1 :(得分:3)
无论是自己动手,使用库函数还是使用递归方法,都需要以某种形式循环生成数字列表。
如果你原则上不反对循环(但不想自己实施),那么有许多实用和深奥的方法(这里已经提到了一些)。
此处发布了类似的问题:How to fill a list。虽然它有一些有趣的解决方案,但它们仍然在循环或使用range
类型函数。
答案 2 :(得分:3)
基于Nihal的解决方案,但返回一个列表:
def recursive_range(n):
if n == 0:
return []
return recursive_range(n-1) + [n-1]
答案 3 :(得分:2)
嗯,是的,您可以在不使用range
,循环或递归的情况下执行此操作:
>>> num = 10
>>> from subprocess import call
>>> call(["seq", str(num)])
您甚至可以拥有一个列表(当然还有一个生成器):
>>> num = 10
>>> from subprocess import check_output
>>> ls = check_output(["seq", str(num)])
>>> [int(num) for num in ls[:-1].split('\n')]
[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, 41, 42]
但是......目的是什么?