替换python中的范围

时间:2016-10-19 05:26:44

标签: python

如果我必须生成自然数,我可以使用'range',如下所示:

list(range(5))

[0,1,2,3,4]

有没有办法在不使用范围函数或循环的情况下实现这一目标?

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]

但是......目的是什么?