Mogę się mylić (po prostu daj mi znać, a usunę pytanie), ale wygląda na to, że Python nie odpowie
for n in range(6,0):
print n
Próbowałem użyć xrange i to też nie zadziałało. Jak mogę to zaimplementować?
Mogę się mylić (po prostu daj mi znać, a usunę pytanie), ale wygląda na to, że Python nie odpowie
for n in range(6,0):
print n
Próbowałem użyć xrange i to też nie zadziałało. Jak mogę to zaimplementować?
for i in reversed(mat):
chociaż może to być wolniejsze
Odpowiedzi:
for n in range(6,0,-1):
print n
# prints [6, 5, 4, 3, 2, 1]
range(5,-1,-1)
. Chociaż prawdopodobnie mógłby to rozgryźć metodą prób i błędów.
Jest już bardzo późno, ale chciałem tylko dodać, że istnieje bardziej elegancki sposób: używanie reversed
for i in reversed(range(10)):
print i
daje:
4
3
2
1
0
reversed(range)
za darmo dzięki ładnej range_reverse
optymalizacji wbudowanej w CPython. Zrobiłem kilka szybkich punktów odniesienia i nie mógł znaleźć znaczącą różnicę między kosztem step=-1
a reversed()
zarówno Python 2.7 i 3.3. Należy również zauważyć, że ten idiom jest używany w heapq .
xrange
w swoich testach Pythona 2.7, reverse
będzie działać na zwykłej, już wygenerowanej liście, a nie na obiekcie zakresu; więc czy chcesz powiedzieć, że dowolną listę można skutecznie odwrócić, czy tylko range/xrange
obiekty? (kod heapq, do którego tworzysz łącze, zawiera obiekt zakresu Python 3).
reversed(range(10))
nie może wyjść 4
przez 0
. Może miałeś na myśli range(5)
?
for n in range(6,0,-1)
To dałoby ci 6,5,4,3,2,1
Jeśli chodzi o
for n in reversed(range(0,6))
dałby ci 5,4,3,2,1,0
Spóźniony na imprezę, ale dla każdego, kto ma za zadanie stworzyć własne lub chce zobaczyć, jak to zadziała, oto funkcja z dodatkową zaletą przestawiania wartości start-stop na podstawie pożądanego przyrostu:
def RANGE(start, stop=None, increment=1):
if stop is None:
stop = start
start = 1
value_list = sorted([start, stop])
if increment == 0:
print('Error! Please enter nonzero increment value!')
else:
value_list = sorted([start, stop])
if increment < 0:
start = value_list[1]
stop = value_list[0]
while start >= stop:
worker = start
start += increment
yield worker
else:
start = value_list[0]
stop = value_list[1]
while start < stop:
worker = start
start += increment
yield worker
Ujemny przyrost:
for i in RANGE(1, 10, -1):
print(i)
Lub z odwróceniem start-stop:
for i in RANGE(10, 1, -1):
print(i)
Wynik:
10
9
8
7
6
5
4
3
2
1
Regularny przyrost:
for i in RANGE(1, 10):
print(i)
Wynik:
1
2
3
4
5
6
7
8
9
Zero przyrostu:
for i in RANGE(1, 10, 0):
print(i)
Wynik:
'Error! Please enter nonzero increment value!'
Dla python3, gdzie wskaż -1
wartość, która ma być zmniejszana w każdym kroku
for n in range(6,0,-1):
print(n)