2016-10-19 4 views
-2

Wenn ich natürliche Zahlen zu erzeugen, kann ich 'Reichweite' wie folgt verwenden:Alternative für Bereich in Python

list(range(5)) 

[0, 1, 2, 3, 4]

Gibt es eine Möglichkeit, dies zu erreichen, ohne Bereichsfunktion oder Looping zu verwenden?

+9

Ich muss fragen warum? – eandersson

+1

Ja, Sie könnten jede Nummer manuell zu einer Liste hinzufügen. Halten Sie 'xrange' für eine Alternative? –

+2

@ cricket_007 'range' gibt eine Liste in Python2 und einen Generator in Python3 zurück. Also nehme ich an, dass er Python3 benutzt, welches nicht 'xrange' hat;) –

Antwort

4

Sie Rekursion verwenden konnten erste n natürliche Zahlen

def printNos(n): 

    if n > 0: 

     printNos(n-1) 
     print n 

printNos(100) 
+0

Interessante Lösung ... aber technisch noch Looping, nicht wahr? – roelofs

+0

@roelofs. Verwendet nur einen Stapel. Außerdem wollte er nur eine Alternative zu einer Bereichsfunktion oder Looping. –

+0

@ayhan. Warum würde das für immer laufen? : D –

3

Looping in irgendeiner Form benötigt werden, drucken oder eine andere eine Liste von Zahlen zu erzeugen, ob Sie es selbst tun, verwenden Bibliotheksfunktionen oder rekursiv verwenden Methoden.

Wenn Sie Schleifen grundsätzlich nicht ablehnen (aber nicht selbst implementieren wollen), gibt es viele praktische und esoterische Möglichkeiten (eine Anzahl wurde hier bereits erwähnt).

Eine ähnliche Frage wurde hier gepostet: How to fill a list. Obwohl es interessante Lösungen gibt, sind sie immer noch in der Schleife oder verwenden range Typ-Funktionen.

3

Basierend auf Nihal-Lösung, sondern liefert eine Liste statt:

def recursive_range(n): 
    if n == 0: 
     return [] 
    return recursive_range(n-1) + [n-1] 
2

Nun ja, Sie können dies tun, ohne range zu verwenden, Schleife oder Rekursion:

>>> num = 10 
>>> from subprocess import call 
>>> call(["seq", str(num)]) 

Sie können sogar eine Liste (oder ein Generator, natürlich):

>>> 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] 

Aber ... was ist der Zweck?

+0

Können Sie einen Link zu einer Dokumentation dazu bereitstellen? Es scheint ein neuer Ansatz zu sein. – roelofs

+0

@roelofs Ich bin nur [einen externen Befehl aufrufen] (http://stackoverflow.com/a/89243/5399734). POSIX-Befehl ['seq'] (http://man.cx/seq) kann eine Folge von Zahlen drucken, was OP zu sein scheint. –

+0

Danke! Wir haben eine Diskussion darüber, ob OP ** irgendwelche ** Looping bedeutet, oder einfach nur selbst Looping. Coole Lösung :) – roelofs