ฉันมีรายการของค่าที่ฉันต้องการกรองตามค่าในรายการบูลีน:
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])