2015-10-22 7 views
5

başlayan bir dizi boyunca yineleme yapmak n + 1 referansına mı sahip?Pythonictir yolu anda 1

Garip görünüyor ki ben iki kere birer artış belirtebilir zorunda olduğunu, nadir değildir ordinally 1'den başlayarak bir dizi yineleme istiyorsanız: başında 1 ile

  1. aralık.
  2. Aralığın sonunda + 1 ile.
+1

Neden bunun "kirli" bir yol olduğunu düşünüyorsunuz? – sobolevn

+1

'n + 1' bir kez değerlendirir, bu nedenle bu 'kirli' bir yol değildir. Bir seçenek olarak, 'range' parametresi olarak n + 1’i beğenmezseniz, daha önce değerlendirin ve sonucu bir değişkene kaydedin, ardından bu değişkeni' range' aramasında kullanın. –

+0

@RafaelOsipov OP'de bazı ayrıntılarda düzenledim. – CAJE

cevap

1

range(1, n+1), çoğaltma olarak kabul edilmez, ancak başka bir numaraya 1 değiştirecekseniz bunun bir güçlük olabileceğini görebiliyorum. 0 hariç

range([start], stop[, step]) 

başlangıç ​​varsayılan 0, step, ne istersen olabilir ve durdurma senin olduğunu: belgelerine

for _ in (number+1 for number in range(5)): 
    print(_) 
+0

Bu soruya güzel cevaplar verdik ama gerçekten aralığımızı (1, n + 1) ' –

+0

'dan hareket ettirdik. Sadece pythonic gibi görünen ve bunu paylaşmak isteyen bu harika jeneratör fikrini yaşadım. –

+0

Dediğim gibi, güzel cevap –

0
for i in range(n): 
    print(i+1) 

çıktısı verir:

1 
2 
... 
n  
+1

Bu, döngü sayımına başvurmak istediğimde +1 kullanacağımdan çok daha temiz anlamına gelmez. Döngüyü tanımlarken bir kere +1 kullanmak yerine, onu birden çok kez kullanmam gerekebilir. – CAJE

1

range(1, n+1) bunu yapmak için ortak bir yoldur, ancak bunu beğenmezseniz, kendi işlevini oluşturabilirsiniz:

def numbers(first_number, last_number, step=1): 
    return range(first_number, last_number+1, step) 

for _ in numbers(1, 5): 
    print(_) 
1

:

Bu bir jeneratör kullanan tekrarını ortadan kaldırır Üst sınır, yineleme sayısı değildir. Yani n üst sınırınız ne olursa olsun onu beyan et ve ona 1 eklemeniz gerekmeyecek.

1

değil genel bir cevap, ama (en çok beş diyelim) çok küçük aralıklar için, ben çok daha okunabilir bir hazır bunları hecelemem bulmak:

for _ in [1,2,3]: 
    print _ 

bile doğrudur İşte bu sıfırdan başlar.

İlgili konular