Ben 100'den 0'a döngü çalışıyorum. Python bunu nasıl yapabilirim?
for i in range (100,0)
çalışmıyor.
range(100)[::-1]
(otomatik olarak çevrilir range(9, -1, -1)
) - Python
Ben 100'den 0'a döngü çalışıyorum. Python bunu nasıl yapabilirim?
for i in range (100,0)
çalışmıyor.
range(100)[::-1]
(otomatik olarak çevrilir range(9, -1, -1)
) - Python
Yanıtlar:
Deneyin range(100,-1,-1)
, üçüncü argüman kullanılacak artıştır ( burada belgelenmiştir ).
("aralık" seçenekleri, başlatma, durdurma, adım burada belgelenir )
Benim düşünceme göre, bu en okunabilir olanı:
for i in reversed(xrange(101)):
print i,
reversed(xrange(len(list)))
etmek xrange(len(list)-1:-1:-1)
; ikincisi çok fazla garip görünüyor -1
.
range
olduğu gibi davranır xrange
. @hacksoi, kullanım durumuna bağlıdır, ancak diyelim ki büyük bir arabellekte geriye doğru yinelediğinizi varsayalım, diyelim ki 10 MB. Ters bir jeneratör kullanmak milisaniye alır ve sadece birkaç bayt bellek kullanır.
Kodunuz neden çalışmadı
Kodunuz for i in range (100, 0)
iyi, hariç
üçüncü parametre ( step
) varsayılan olarakdır +1
. Bu nedenle, -1
geriye doğru adım olarak range () için 3. parametreyi belirtmeniz gerekir .
for i in range(100, -1, -1):
print(i)
NOT: Bu çıkışta 100 ve 0 içerir.
Birden çok yol var.
Daha iyi yol
Pitonik yol için PEP 0322'yi kontrol edin .
Bu 100'den 0'a (100 ve 0 dahil) yazdırmak için Python3 pythonic örneğidir.
for i in reversed(range(101)):
print(i)
reversed
PEP-322'de nasıl uygulanacağı tavsiyesi yanıltıcıdır, bu nedenle tekrarlanabilir reversed
çağrıyı __reversed__
çağıracak ve sonucu döndürecek ve range
nesneler için bu tembel bir değerlendirilmiş range_object
yineleyicidir. Kısacası: bu yöntemi kullanmak hala tembel bir değerlendirmedir.
for var in range(10,-1,-1)
İşler
Bunu codeacademy egzersizlerinden birinde denedim (tersine ne de :: -1 kullanmadan bir dizede ters karakterleri)
def reverse(text):
chars= []
l = len(text)
last = l-1
for i in range (l):
chars.append(text[last])
last-=1
result= ""
for c in chars:
result += c
return result
print reverse('hola')
Negatif indeks gerekiyordu bu yüzden aynı anda iki liste üzerinden döngü istedim. Bu benim çözümüm:
a= [1,3,4,5,2]
for i in range(-1, -len(a), -1):
print(i, a[i])
Sonuç:
-1 2
-2 5
-3 4
-4 3
-5 1
Oh tamam soruyu yanlış okudum, sanırım bir dizide geriye gitmekle ilgili? eğer öyleyse, ben var:
array = ["ty", "rogers", "smith", "davis", "tony", "jack", "john", "jill", "harry", "tom", "jane", "hilary", "jackson", "andrew", "george", "rachel"]
counter = 0
for loop in range(len(array)):
if loop <= len(array):
counter = -1
reverseEngineering = loop + counter
print(array[reverseEngineering])
global
ve time
önemli değildir.
Python'da özel bir ters mekanizma da oluşturabilirsiniz. Hangi tekrarlanabilir bir geriye döngü için herhangi bir yerde kullanılabilir
class Reverse:
"""Iterator for looping over a sequence backwards"""
def __init__(self, seq):
self.seq = seq
self.index = len(seq)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index -= 1
return self.seq[self.index]
>>> d = [1,2,3,4,5]
>>> for i in Reverse(d):
... print(i)
...
5
4
3
2
1
a = 10
for i in sorted(range(a), reverse=True):
print i
sorted
tüm listeyi gereksiz yere bellekte saklayacağını biliyorsunuz, değil mi? Bu israftır ve büyük olanlar için uygun değildir a
.