2010-11-19 24 views
12

Başlangıçta her hücrede Yok olan bir 6x5 2d dizisi oluşturuyorum. Daha sonra bir dosya okuyor ve okuduğum gibi Nones'leri veriyle değiştiriyorum. Önce boş diziyi oluşturuyorum çünkü veriler okuduğum dosyada tanımlanmamış bir sırada. Benim ilk girişimi yaptım bu: Şimdi listelerinde * operatörü yerine kopya başvuru oluşturabilir çünkü anlamak bazı garip hatalar sonuçlandı Python'da 2d matris oluşturma

x = [[None]*5]*6 

.

Bu boş diziyi oluşturmak için kolay bir astar var mı? Sadece bazı döngüler için yapabilirim ve onu inşa edebilirim, ama bu python için gereksiz bir şekilde tempolu görünüyor.

+3

, en az numpy bulunduğunu bilmelidir: http : //numpy.scipy.org/ Yuvalanmış listelerde yanlış bir şey yok, tabiki ve uyuşukluk gibi bir (büyük) bağımlılık eklemek her zaman iyi bir şey değildir. Ancak, zaten bilmiyorsanız, şimdi, siz yapın! –

cevap

22

Kullanılması iç içe anlama listeleri:

x = [[None for _ in range(5)] for _ in range(6)] 
19

Burada neler oluyor çizgi

x = [[None]*5]*6 

Eğer 6 ile bir liste var Bu noktada

x = [[None, None, None, None, None, None]]*6 

dışarı genişler olmasıdır tekil None için farklı referanslar. Ayrıca ilk ve tek giriş olarak iç listeye bir başvuru ile bir liste var. 6 ile çarptığınızda, anladığınız kadarıyla iç listeye 5 daha fazla referans alıyorsunuz. Ama asıl mesele şu ki, iç listesindeki iç listesin- de, sadece dışsal olanı, yani içsel listelerin yapısını kavramaya gerek duymayacaksınız.

x = [[None]*5 for _ in range(6)] 

Bu listelerin başvurular çoğaltarak önler ve okunabilecek şekilde inanıyorum almak gibi yaklaşık olarak özlü.

1

Eğer numpy rota gidiş değildir varsa, sözlükleri ile sahte 2D diziler olabilir:

Eğer n boyutlu diziler dikkatli davranmalıyız
>>> x = dict(((i,j),None) for i in range(5) for j in range(6)) 
>>> print x[3,4] 
None 
İlgili konular