SORU
30 Temmuz 2009, PERŞEMBE


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
30 Temmuz 2009, PERŞEMBE


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Brendan van Son

    Brendan van

    5 Aralık 2006
  • NLthomas21

    NLthomas21

    20 Mayıs 2008
  • Titan Lee Hai

    Titan Lee Ha

    14 Temmuz 2008