Bazı Python kodunu analiz ediyorum ve ne olduğunu bilmiyorum
pop = population[:]
anlamına geliyor. Java'daki dizi listeleri gibi mi yoksa iki boyutlu bir dizi mi?
Bazı Python kodunu analiz ediyorum ve ne olduğunu bilmiyorum
pop = population[:]
anlamına geliyor. Java'daki dizi listeleri gibi mi yoksa iki boyutlu bir dizi mi?
list
s sağlamak clear
ve copy
yöntemleri yapmak del mylist[:]
veya mylist[:]
sırasıyla eşdeğerdir . Bunlar genel olarak değiştirilebilir diziler için gerekli değildir, bu nedenle rastgele değiştirilebilir bir dizi elde ederseniz, dilim tabanlı işlemlere bağlı kalmak istersiniz, ancak adlandırılmış yöntemler en azından kullanılabilir list
.
Yanıtlar:
Bu, bir dilim gösterimi örneğidir ve ne yaptığı, türüne bağlıdır population
. Eğer population
bir listedir bu satır yaratacak sığ kopya listesinin. tuple
Veya a türündeki bir nesne str
için hiçbir şey yapmaz (satır aynısını olmadan yapacaktır [:]
) ve bir NumPy dizisi için (örneğin) aynı verilere yeni bir görünüm oluşturacaktır.
l.copy()
daha okunabilir, ama işe yaramayacak.
list(l)
her zaman işe yarar, daha okunabilirdir venumpy.array
list.clear()
. Yine de, bu SO ile ilgili bu tür soruların önemli ölçüde azalmasına yol açana kadar biraz zaman alacaktır. :)
A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)]
, neredeyse her zaman tercih ederim numpy.rollaxis(A, axis, 0)[k]
. Genel olarak, doğrudan slice()
nesneler oluşturmanız gereken bir kullanım durumuyla nadiren karşılaştım . Bunlara yine de ihtiyacınız varsa, NumPy s_
yardımcıyı bunları oluşturmanın alternatif bir yolu olarak sağlar.
Ayrıca, bir liste diliminin genel olarak listenin bir parçasının bir kopyasını oluşturduğunu bilmek de yardımcı olabilir. Örneğin population[2:4]
, [2] popülasyonunu ve [3] popülasyonunu içeren bir liste döndürecektir (dilimleme sağa özeldir). population[:]
Varsayılan olarak sırasıyla 0 ve uzunluk (popülasyon) olduğu gibi sol ve sağ dizini bir kenara bırakarak tüm listeyi seçer. Dolayısıyla bu, bir listenin kopyasını yapmak için kullanılan yaygın bir deyimdir.
iyi ... bu gerçekten içeriğe bağlı. Sonuç olarak, bu geçer slice
nesne ( slice(None,None,None)
aşağıdaki yöntemlerden birine) __getitem__
, __setitem__
ya da __delitem__
. (Aslında, nesnede bir __getslice__
yerine kullanılacak olan bir a varsa __getitem__
, ancak artık kullanımdan kaldırılmıştır ve kullanılmamalıdır).
Nesneler dilimle istediklerini yapabilir.
Bağlamında:
x = obj[:]
Bu, obj.__getitem__
iletilen dilim nesnesiyle birlikte çağırır . Aslında bu, şuna tamamen eşdeğerdir:
x = obj[slice(None,None,None)]
(ilki muhtemelen daha etkilidir çünkü kurucuyu aramak zorunda değildir slice
- Her şey bayt kodu ile yapılır).
Çoğu nesne için bu, dizinin bir bölümünün yüzeysel bir kopyasını oluşturmanın bir yoludur.
Sonraki:
x[:] = obj
Öğeleri (çağırır __setitem__
) temel alarak ayarlamanın bir yoludur obj
.
ve sanırım ne olduğunu tahmin edebilirsiniz:
del x[:]
arar ;-).
Ayrıca farklı dilimler de geçirebilirsiniz:
x[1:4]
yapılar slice(1,4,None)
x[::-1]
yapılar slice(None,None,-1)
vb. Daha fazla okuma: Python'un dilim gösterimini açıklayın
Bu bir olan dilim genellikle basit bir kopyasını üreten sonuna kadar dizinin, başından itibaren.
(Şey, bundan daha fazlası ama henüz umursamana gerek yok.)
Zaten var olan listeye yeni bir ad atamak yerine, listenin bir kopyasını oluşturur.
[:]
sınırlayıcı veya dizide dilimleme için kullanılır, karma
örneğin:
[1: 5] 1 kapsayıcı ile 5 dışlayıcı arasındaki değerleri görüntülemek için, yani 1-4
[başlangıç: bitiş]
temelde dilimleme için dizide kullanılır, parantezin anlamı olan değişkeni kabul edin değer veya anahtar görüntülenecek ve ":" tüm diziyi paketler halinde sınırlamak veya dilimlemek için kullanılır.
a[1:5]
2-4 değil, 1-4 öğelerini döndürür.