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

  • optionalinfo

    optionalinfo

    29 EKİM 2005
  • Roger Huffman

    Roger Huffma

    4 ŞUBAT 2007
  • Tek Syndicate

    Tek Syndicat

    23 Temmuz 2008