แทนที่ลูปสร้างข้อมูลของคุณด้วยคอมพรีเฮนชันที่สื่อความหมาย เพื่อแปลง กรอง และจัดดัชนีข้อมูลใหม่
เปิดบทเรียนนี้ใน Kodokonคอมพรีเฮนชันของลิสต์ (list comprehension) ย่อรูปแบบที่พบบ่อยที่สุดในการเขียนโปรแกรมให้กระชับ นั่นคือการสร้างลิสต์ด้วยการแปลงหรือกรองลำดับข้อมูล ไวยากรณ์ของมันอ่านได้เหมือนประโยค [expression for element in sequence if condition] ให้ผลลัพธ์เดียวกับลูปที่ใช้ append แต่อยู่ในบรรทัดเดียวเชิงประกาศ ซึ่งนักพัฒนา Python ทุกคนจดจำได้ในพริบตา
prices = [12.0, 49.9, 5.5, 199.0]
with_tax = [round(p * 1.2, 2) for p in prices]
cheap = [p for p in prices if p < 50]
print(with_tax) # [14.4, 59.88, 6.6, 238.8]
print(cheap) # [12.0, 49.9, 5.5]คอมพรีเฮนชันของดิกชันนารี (dictionary comprehension) ใช้ตรรกะเดียวกันด้วยไวยากรณ์ {key: value for ...} กรณีใช้งานที่พบบ่อยมากในโปรเจกต์คือ การจัดดัชนีลิสต์ของอ็อบเจกต์ใหม่โดยใช้ตัวระบุของมัน เพื่อให้ค้นหาได้ทันทีแทนที่จะต้องไล่อ่านทั้งลิสต์ทุกครั้งที่ต้องการข้อมูล
users = [
{"id": 7, "name": "Alice"},
{"id": 12, "name": "Bruno"},
{"id": 31, "name": "Chloe"},
]
by_id = {u["id"]: u["name"] for u in users}
print(by_id[12]) # Bruno
print(31 in by_id) # Trueif มีได้สองตำแหน่ง และมีสองบทบาทที่ต่างกัน เมื่อวางไว้ หลัง for มันจะ กรอง สมาชิกที่ไม่ผ่านจะไม่ปรากฏในผลลัพธ์ เมื่อวางไว้ ก่อน for ในฐานะนิพจน์เงื่อนไข (a if condition else b) มันจะ เลือกค่า ให้สมาชิกแต่ละตัว ลิสต์ที่ได้จึงมีความยาวเท่ากับต้นฉบับ
scores = [45, 82, 67, 91]
labels = ["pass" if s >= 60 else "fail" for s in scores]
print(labels) # ['fail', 'pass', 'pass', 'pass']