Öyle görünüyor ki bir liste bu şekilde boşaltılıyor:
while len(alist) > 0 : alist.pop()
Bunu yapmak için açık bir yol var mı?
Öyle görünüyor ki bir liste bu şekilde boşaltılıyor:
while len(alist) > 0 : alist.pop()
Bunu yapmak için açık bir yol var mı?
Yanıtlar:
Bu aslında içeriği listeden kaldırır, ancak eski etiketi yeni bir boş listeyle değiştirmez:
del lst[:]
İşte bir örnek:
lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)
Tamlık uğruna, dilim ataması aynı etkiye sahiptir:
lst[:] = []
Aynı zamanda bir parçayı değiştirirken listenin bir kısmını daraltmak için de kullanılabilir (ancak bu sorunun kapsamı dışındadır).
Yapmanın lst = []
listeyi boşaltmadığını, yalnızca yeni bir nesne oluşturduğunu ve değişkene bağladığını lst
, ancak eski listenin yine de aynı öğelere sahip olacağını ve başka değişken bağlamaları varsa efektin görüneceğini unutmayın.
Python 3.3 veya daha iyi çalıştırıyorsanız kullanabilirsiniz clear()
yöntemini list
paralel, clear()
bir dict
, set
, deque
ve diğer değişken konteyner tipleri:
alist.clear() # removes all items from alist (equivalent to del alist[:])
Bağlantılı dokümantasyon sayfasına göre, aynı şey ile de elde edilebilir alist *= 0
.
Özetlemek gerekirse, yerinde bir listeyi temizlemenin dört eşdeğer yolu vardır (Python'un Zen'inin aksine !):
alist.clear() # Python 3.3+
del alist[:]
alist[:] = []
alist *= 0
Deneyebilirsiniz:
alist[:] = []
Bunun anlamı: Listedeki yeri []
(0 öğe) konuma [:]
ekleme (baştan sona tüm dizinler)
[:] Dilim işlecidir. Daha fazla bilgi için bu soruya bakın .
alist = []
?
alist
farklı bir listeyle değişkenin üzerine yazar . Orijinal listeye başka bir referans varsa, bu olduğu gibi kalır (yani içinde başlamak için ne varsa içerir)
alist.clear()
ya da gerçekten bir liste alist[:] = []
olduğunu kontrol etmeye yardımcı olur alist
. Diyelim ki alist
bir işlevden döndün foo()
. foo
Bir liste döndürdüğünü düşündün ama gerçekten bir geri döndü None
. Kullanmak alist = []
bu hatayı yakalayamaz.
python 2.5.2 ile 1.1 usec'den del l[:]
biraz daha yavaş olduğu ortaya l[:] = []
çıkıyor.
$ python -mtimeit "l=list(range(1000))" "b=l[:];del b[:]"
10000 loops, best of 3: 29.8 usec per loop
$ python -mtimeit "l=list(range(1000))" "b=l[:];b[:] = []"
10000 loops, best of 3: 28.7 usec per loop
$ python -V
Python 2.5.2
.clear()
, del b[:]
Ve b[:]=[]
aynı bütün çalışır ( b[:]=[]
biraz daha yavaş olmak.
lst *= 0
ile aynı etkiye sahiptir
lst[:] = []
Biraz daha basit ve hatırlanması belki daha kolay. Bunun dışında söyleyecek çok şey yok
Verimlilik yaklaşık olarak aynı görünüyor
0
aynı etkiye sahip olacağından bahsetmek gerekir . Çok dikkat çekici bir hile, biraz üzgünüm, fazla ilgi görmediği ..
list = []
list
boş bir listeye sıfırlanır .
Genellikle list
bir liste nesnesinin kurucusu olan ayrılmış işlev adlarını gölgelendirmemeniz gerektiğini unutmayın; örneğin lst
veya list_
yerine kullanabilirsiniz .
list
. Bir işlevin geçirilen bir listeyi değiştirmesini bekliyorsanız (örneğin), bu istediğinizi yapmaz.
Kullanabileceğiniz bir diğer basit kod (durumunuza bağlı olarak):
index=len(list)-1
while index>=0:
del list[index]
index-=1
Dizini listenin uzunluğunda başlatmanız ve dizinde 0'a doğru geri gitmeniz gerekir, çünkü bu sizi listenin uzunluğuna eşit bir dizinle yalnızca yarıya indirilir.
Ayrıca while satırının "büyük veya eşit" işaretine sahip olduğundan emin olun. Bunu atladığınızda, [0] listesi kalır.