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

  • Caramthros

    Caramthros

    10 AĞUSTOS 2007
  • SPBedition

    SPBedition

    24 HAZİRAN 2013
  • The Platform

    The Platform

    14 HAZİRAN 2006