Tôi có một danh sách các giá trị mà tôi cần lọc theo các giá trị trong danh sách booleans:
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
Tôi tạo một danh sách được lọc mới với dòng sau:
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
kết quả là:
print filtered_list
[1,4]
Dòng này hoạt động nhưng có vẻ (với tôi) hơi quá mức và tôi đã tự hỏi liệu có cách nào đơn giản hơn để đạt được điều tương tự.
Lời khuyên
Tóm tắt hai lời khuyên tốt được đưa ra trong các câu trả lời dưới đây:
1- Không đặt tên danh sách filter
như tôi đã làm vì đây là chức năng tích hợp.
2- Đừng so sánh những thứ True
như tôi đã làm if filter[idx]==True..
vì nó không cần thiết. Chỉ cần sử dụng if filter[idx]
là đủ.
if filter[indx] == True
Đừng không sử dụng ==
nếu bạn muốn kiểm tra danh tính với True
, sử dụng is
. Dù sao trong trường hợp này, toàn bộ so sánh là vô ích, bạn chỉ có thể sử dụng if filter[indx]
. Cuối cùng: không bao giờ sử dụng tên của một tên tích hợp làm tên biến / mô-đun (tôi đang đề cập đến tên filter
). Sử dụng một cái gì đó như included
, để if
đọc độc đáo ( if included[indx]
).