Python yineleme sırasında bir listeden öğeleri kaldırmak
Python dizilerini bir liste üzerinden yineleme ve eğer belirli kriterleri karşılaması durumunda onları kaldırmaya çalışan biri değilim.
for tup in somelist:
if determine(tup):
code_to_remove_tup
Ben code_to_remove_tup yerine kullanılır. Bu şekilde öğe kaldırmak için nasıl çözemiyorum.
CEVAP
Cevaplar liste üreteçleri ileri sürmek tamamen yeni bir liste oluşturmak dışında NEREDEYSE doğru ... ve sonra eski liste gibi, yerde eski listeyi değiştirmez aynı adı verin. Bu farklı ne olursun yaparak seçici temizleme, @Lennart önerisi -- daha hızlı, ama eğer listenizi erişilen üzerinden çok sayıda başvuru olduğun gerçeği, sadece oturtmak bir referans ve değiştirme listesi nesnenin kendisi açabilir ince, korkunç hatalar.
Neyse ki son derece kolay liste üreteçleri hız VE yer değiştirme ... sadece kod gerekli semantiği her iki elde etmek için:
somelist[:] = [tup for tup in somelist if determine(tup)]
Not diğer cevaplar ile ince fark bu sadece olur barename liste atama bir dilim için tüm listeyi, böylece listeyi değiştirmek için atama DEĞİLDİRiçindekileraynı Python içinde nesne listesisadece bir referans (yeni liste nesnesi için önceki liste nesneden) diğer cevaplar gibi oturtmak yerine.
Nasıl üzerinde yineleme sırasında gene...
Nasıl Python dizin tarafından bir list...
SERİ bir listeden öğeleri kaldırmak iç...
En iyi yineleme sırasında NSMutableArr...
Bir std öğeleri kaldırın::bu yineleme ...