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 filter
benim yaptığım gibi adlandırmayın çünkü bu yerleşik bir işlevdir.
2- Gereksiz olduğu için True
yaptığım gibi şeyleri karşılaştırmayın if filter[idx]==True..
. Sadece kullanmak if filter[idx]
yeterli.
if filter[indx] == True
Do not kullanmak ==
sizinle kimlik kontrol etmek istiyorsanız True
kullanı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
, if
güzelce okur ( if included[indx]
)