Python - รายการความเข้าใจ
รายการความเข้าใจ
ความเข้าใจรายการมีไวยากรณ์ที่สั้นลงเมื่อคุณต้องการสร้างรายการใหม่ตามค่าของรายการที่มีอยู่
ตัวอย่าง:
จากรายชื่อผลไม้ คุณต้องการรายการใหม่ที่มีเฉพาะผลไม้ที่มีตัวอักษร "a" อยู่ในชื่อ
หากไม่มีความเข้าใจในรายการ คุณจะต้องเขียนfor
คำสั่งที่มีการทดสอบแบบมีเงื่อนไขอยู่ภายใน:
ตัวอย่าง
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []
for x in fruits:
if "a" in x:
newlist.append(x)
print(newlist)
ด้วย list comprehension คุณสามารถทำสิ่งนั้นได้โดยใช้โค้ดเพียงบรรทัดเดียว:
ตัวอย่าง
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x
for x in fruits if "a" in x]
print(newlist)
ไวยากรณ์
newlist = [expression for item in iterable if condition == True]
ค่าส่งกลับเป็นรายการใหม่ โดยปล่อยให้รายการเก่าไม่เปลี่ยนแปลง
สภาพ
เงื่อนไข เหมือน ตัวกรองที่ยอมรับเฉพาะรายการที่ประเมิน
True
ค่า
ตัวอย่าง
ยอมรับเฉพาะรายการที่ไม่ใช่ "apple":
newlist = [x for x in fruits if x != "apple"]
เงื่อนไข
if x != "apple"
จะส่งคืนTrue
องค์ประกอบทั้งหมดนอกเหนือจาก "apple" ทำให้รายการใหม่มีผลไม้ทั้งหมดยกเว้น "apple"
เงื่อนไขนี้เป็นทางเลือกและสามารถละเว้นได้:
ตัวอย่าง
โดยไม่มีif
ข้อความว่า
newlist = [x for x in fruits]
Iterable
iterableสามารถเป็นวัตถุ iterable ใดๆ เช่น list, tuple, set เป็นต้น
ตัวอย่าง
คุณสามารถใช้range()
ฟังก์ชันเพื่อสร้าง iterable:
newlist = [x for x in range(10)]
ตัวอย่างเดียวกัน แต่มีเงื่อนไขว่า
ตัวอย่าง
ยอมรับเฉพาะตัวเลขที่ต่ำกว่า 5:
newlist = [x for x in range(10) if x < 5]
การแสดงออก
นิพจน์ คือรายการปัจจุบันใน การวนซ้ำ แต่ก็เป็นผลลัพธ์ด้วย ซึ่งคุณสามารถจัดการได้ก่อนที่มันจะจบลงเหมือนรายการในรายการใหม่:
ตัวอย่าง
ตั้งค่าในรายการใหม่เป็นตัวพิมพ์ใหญ่:
newlist = [x.upper()
for x in fruits]
คุณสามารถตั้งค่าผลลัพธ์ตามที่คุณต้องการ:
ตัวอย่าง
ตั้งค่าทั้งหมดในรายการใหม่เป็น 'สวัสดี':
newlist = ['hello' for x in fruits]
นิพจน์ ยัง สามารถมีเงื่อนไข ไม่เหมือนตัวกรอง แต่เป็นวิธีจัดการผลลัพธ์:
ตัวอย่าง
ส่งคืน "ส้ม" แทน "กล้วย":
newlist = [x if x != "banana" else "orange"
for x in fruits]
นิพจน์ในตัวอย่างข้างต้นกล่าวว่า:
"คืนของให้ถ้าไม่ใช่กล้วย ถ้ากล้วยคืนส้ม"