2010-12-28 15 views
14

Python'da otomatik olarak büyüyen bir liste oluşturmanın bir yolu var mı? Demek istediğim, henüz var olmayan bir dizin başvurulduğunda büyüyecek bir liste yapmak. Temelde Ruby dizilerinin davranışı.Python'da otomatik olarak büyüyen listeler

Şimdiden teşekkürler!

+0

Umm, sen listeleri çalışma biçimini açıklayan ediyoruz. Ne yapmaya çalışıyorsun çalışmıyor? – Falmarri

+0

Demek istediğim, bağlam kapsama alanı dışındaysa, bir hata oluşturur. Listenin dizinin bulunduğu bir boyuta büyümesini istiyorum; Ruby'de bu tüm ara noktaları Null ile doldurur. – Anonymous

+1

Henüz varolmayan dizinin içeriğinin, ilk başvurulduğunda (ve ondan önceki tüm öğeler) ne olmasını istiyorsunuz? "Yok" mu, yoksa başka bir varsayılan değer mi olmalı? –

cevap

31

Elbette, bunu yapmak için bir liste alt sınıfı kullanmanız yeterlidir.

class GrowingList(list): 
    def __setitem__(self, index, value): 
     if index >= len(self): 
      self.extend([None]*(index + 1 - len(self))) 
     list.__setitem__(self, index, value) 

Kullanımı:

>>> grow = GrowingList() 
>>> grow[10] = 4 
>>> len(grow) 
11 
>>> grow 
[None, None, None, None, None, None, None, None, None, None, 4] 
+0

Teşekkür ederim, tam ihtiyacım olan şey bu. – Anonymous

+0

Sorun değil, yardım etmekten memnunum. –

+5

Sadece bu nadir diziler için bir yapıya ihtiyacınız varsa, bu sözlük tabanlı bir çözüm ile daha iyi kapalı olması için, sadece yoğun diziler için gerçekten yararlı olduğunu unutmayın. –

-1

Hayır, ancak aynı şeyi elde etmek için bir sözlük (karma tablo) kullanabilirsiniz.

+0

Teşekkürler, ama sipariş edilmesine ihtiyacım var. – Anonymous

+0

Sonra [OrderedDict] (http://docs.python.org/library/collections.html#collections.OrderedDict) nesnesini deneyebilirsiniz. ;-) – Keith

+0

Bu, sözlüklerin endeks içermediği için işe yaramıyor. – Anonymous

-1

Python'de dinamik listelerdir. Programınızda her zaman otomatik olarak büyür (sys.maxsize 'ye kadar).

Bunu yapmaya devam edin.

+0

Hayır, aralık dışı bir dizin başvurulduğunda büyüyeceği anlamına gelir. Örneğin, bir [100] = 101 çağrıldığında a = [1,2,3] büyür. – Anonymous

+0

Bir [3] 'den' a [99] 'a kadar olan değerler bundan sonra ne olmalıdır? –

+0

Ruby'de, ara öğeler 'nil 'olarak ayarlanır; Python'da, “Yok” mantıksal seçim olurdu. –

İlgili konular