SORU
22 NİSAN 2014, Salı


Range() gerçekten listeleri oluşturmak?

Her iki profesör ve this guy range değerler listesi oluşturur iddia ediyor.

"Not: range fonksiyonu, bir liste numaralarını içeren döndürür y-1-x. Örneğin, range(5, 10) listesi [5, 6, 7, 8,döndürür 9]."

Bu nedenle hatalı olduğuna inanıyorum:

type(range(5, 10))
<class 'range'>

Ayrıca, tamsayılar range tarafından oluşturulan erişmek için tek gözle görülür şekilde bana bir liste olarak range etiketleme yanlış olduğuna inandırır onları boyunca yineleme yapmak için.

CEVAP
22 NİSAN 2014, Salı


Python 2'de.x, 29* *bir listesini verir, ama Python 3'te.x range değişmez bir sıra yazın range döndürür.

Python 2.x:

>>> type(range(10))
<type 'list'>
>>> type(xrange(10))
<type 'xrange'>

Python 3.x:

>>> type(range(10))
<class 'range'>

Python 2'de.eğer iterable nesne, Python 3'teki gibi elde etmek istiyorsanız x,.x, türü değişmez bir sırası xrange döner xrange fonksiyonu kullanabilirsiniz.

Python 2 range xrange avantaj.x:

Avantaj xrange() range() en az bir (beri xrange() hala yaratmak zorunda değerlerini sorduğunda onlara) dışında, bir çok geniş yelpazede kullanılan bir bellek aç makine veya zaman aralığı bu unsurlar hiç kullanılmamış (gibi döngü genellikle sonlandırıldı terk).

Not:

Ayrıca, tamsayılar range() tarafından oluşturulan erişim için sadece belli bir şekilde onları yineleme

Hayır. Python 3 range nesneler değişmez dizileri olduğundan, dizin de destek veriyor. range işlevi belgelere alıntı,

Aralıkları birleştirme ve tekrarlama dışında ortak bir dizi işlem uyguluyor

...

Nesneleri collections.abc.Sequence ABC uygulamak ve muhafaza testleri gibi özellikler sağlar, Aralıkelement dizin aramave negatif indis desteğini kesti.

Örneğin,

>>> range(10, 20)[5]
15
>>> range(10, 20)[2:5]
range(12, 15)
>>> list(range(10, 20)[2:5])
[12, 13, 14]
>>> list(range(10, 20, 2))
[10, 12, 14, 16, 18]
>>> 18 in range(10, 20)
True
>>> 100 in range(10, 20)
False

Tüm bu range Bu değişmez sırası ile mümkündür.


Geçenlerde bir sorun yaşadım ve buraya eklemek uygun olur diye düşünüyorum. Bu Python 3 düşünün.x Kod

from itertools import islice
numbers = range(100)
items = list(islice(numbers, 10))
while items:
    items = list(islice(numbers, 10))
    print(items)

Bu kod 99 kadar bir liste olarak yazdırmak her on numaraları, beklenir. Ama, sonsuz çalıştırın. Sebebi neden olabilir?

Çözüm

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bogdan Gabriel

    Bogdan Gabri

    5 Aralık 2006
  • psidot

    psidot

    2 Kasım 2006
  • Wronchi Animation

    Wronchi Anim

    9 Mayıs 2011