ฉันมีรายการของค่าที่ฉันต้องการกรองตามค่าในรายการบูลีน:
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
ฉันสร้างรายการที่กรองใหม่ด้วยบรรทัดต่อไปนี้:
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
ซึ่งส่งผลให้:
print filtered_list
[1,4]
สายใช้งานได้ แต่ดูเหมือน (สำหรับฉัน) มากเกินไปและฉันก็สงสัยว่ามีวิธีที่ง่ายกว่าในการบรรลุเป้าหมายเดียวกันหรือไม่
คำแนะนำ
สรุปคำแนะนำที่ดีสองประการในคำตอบด้านล่าง:
1- อย่าตั้งชื่อรายการfilter
เหมือนที่ฉันทำเพราะเป็นฟังก์ชันในตัว
2- อย่าเปรียบเทียบสิ่งต่างๆกับสิ่งที่True
ฉันทำif filter[idx]==True..
เพราะมันไม่จำเป็น แค่ใช้if filter[idx]
ก็เพียงพอแล้ว
if filter[indx] == True
ไม่ได้ใช้==
ถ้าคุณต้องการที่จะตรวจสอบตัวตนกับการใช้งานTrue
อย่างไรก็ตามในกรณีนี้การเปรียบเทียบทั้งไม่มีประโยชน์ที่คุณก็สามารถใช้is
if filter[indx]
สุดท้าย: อย่าใช้ชื่อบิวท์อินเป็นชื่อตัวแปร / โมดูล (ฉันหมายถึงชื่อfilter
) ใช้สิ่งที่ต้องการincluded
เพื่อให้if
อ่านได้ดี ( if included[indx]
)