webentwicklung-frage-antwort-db.com.de

Überspringen Sie einen Wert in der Range-Funktion in Python

Was ist der Pythonic-Weg, einen Zahlenbereich zu durchlaufen und einen Wert zu überspringen? Zum Beispiel reicht der Bereich von 0 bis 100 und ich möchte 50 überspringen.

Edit: Hier ist der Code, den ich verwende

for i in range(0, len(list)):
    x= listRow(list, i)
    for j in range (#0 to len(list) not including x#)
        ...
27
David

Sie können eine der folgenden verwenden:

# Create a range that does not contain 50
for i in [x for x in xrange(100) if x != 50]:
    print i

# Create 2 ranges [0,49] and [51, 100] (Python 2)
for i in range(50) + range(51, 100):
    print i

# Create a iterator and skip 50
xr = iter(xrange(100))
for i in xr:
    print i
    if i == 49:
        next(xr)

# Simply continue in the loop if the number is 50
for i in range(100):
    if i == 50:
        continue
    print i
57
njzk2
for i in range(100):
    if i == 50:
        continue
    dosomething
1
Daniel

Es hängt davon ab, was Sie tun möchten. Zum Beispiel könnten Sie einige Bedingungen wie diese in Ihr Verständnis einschließen:

# get the squares of each number from 1 to 9, excluding 2
myList = [i**2 for i in range(10) if i != 2]
print(myList)

# --> [0, 1, 9, 16, 25, 36, 49, 64, 81]
1

Neben dem Python 2-Ansatz sind hier die Entsprechungen für Python 3 aufgeführt:

# Create a range that does not contain 50
for i in [x for x in range(100) if x != 50]:
    print(i)

# Create 2 ranges [0,49] and [51, 100]
from itertools import chain
concatenated = chain(range(50), range(51, 100))
for i in concatenated:
    print(i)

# Create a iterator and skip 50
xr = iter(range(100))
for i in xr:
    print(i)
    if i == 49:
        next(xr)

# Simply continue in the loop if the number is 50
for i in range(100):
    if i == 50:
        continue
    print(i)

Bereiche sind Listen in Python 2 und Iteratoren in Python 3.

1
Locke

Es ist zeitlich ineffizient, jede Zahl zu vergleichen, was unnötigerweise zu einer linearen Komplexität führt. Dieser Ansatz vermeidet jedoch alle Ungleichheitsprüfungen:

import itertools

m, n = 5, 10
for i in itertools.chain(range(m), range(m + 1, n)):
    print(i)  # skips m = 5

Abgesehen davon möchten Sie (*range(m), *range(m + 1, n)) Nicht verwenden, obwohl dies funktioniert, da es die iterablen zu einem Tupel erweitert und dies speicherineffizient ist.


Kredit: Kommentar von njzk2, Antwort von Locke

0
Acumenus