Bir boole listesindeki değerlere göre filtrelemem gereken değerlerin bir listesi var:
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
Aşağıdaki satırla yeni bir filtrelenmiş liste oluşturuyorum:
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
sonuç:
print filtered_list
[1,4]
Çizgi çalışıyor ama (bana) biraz abartılı görünüyor ve aynısını başarmanın daha basit bir yolu olup olmadığını merak ediyordum.
Tavsiyeler
Aşağıdaki cevaplarda verilen iki iyi tavsiyenin özeti:
1- Bir listeyi filterbenim yaptığım gibi adlandırmayın çünkü bu yerleşik bir işlevdir.
2- Gereksiz olduğu için Trueyaptığım gibi şeyleri karşılaştırmayın if filter[idx]==True... Sadece kullanmak if filter[idx]yeterli.
if filter[indx] == TrueDo not kullanmak ==sizinle kimlik kontrol etmek istiyorsanız Truekullanımı is. Her neyse, bu durumda tüm karşılaştırma işe yaramaz, basitçe kullanabilirsiniz if filter[indx]. Son olarak: hiçbir zaman bir yerleşik aygıtın adını değişken / modül adı olarak kullanmayın (isme atıfta bulunuyorum filter). Gibi bir şey kullanarak included, ifgüzelce okur ( if included[indx])