แสดงรายการความเข้าใจใน Python – พร้อมตัวอย่าง
เผยแพร่แล้ว: 2022-02-18ใน Python ความเข้าใจรายการช่วยให้คุณสร้างรายการใหม่จาก iterables ที่มีอยู่ เช่น รายการ สตริง และ tuples
ไวยากรณ์ที่กระชับช่วยให้คุณสร้างรายการใหม่ในโค้ดเพียงบรรทัดเดียว และบทช่วยสอนนี้จะสอนวิธีการทำ
ในอีกไม่กี่นาทีข้างหน้า คุณจะได้เรียนรู้:
- วิธีสร้างรายการใหม่โดยใช้
for
loops - ไวยากรณ์สำหรับการใช้รายการความเข้าใจใน Python และ
- วิธีแก้ไขความเข้าใจรายการด้วยคำสั่งเงื่อนไข
if
นอกจากนี้ คุณยังจะได้โค้ดตัวอย่างหลายๆ ตัวอย่างที่จะช่วยให้คุณเข้าใจรายการเข้าใจได้ดีขึ้น
มาดำดิ่งกัน
วิธีสร้างรายการ Python สำหรับลูป
สมมติว่าคุณมีจำนวนรายการของตัวเลข nums
และคุณต้องการสร้างรายการอื่นที่มีลูกบาศก์ของตัวเลขทั้งหมดเป็น nums
นี่คือวิธีที่คุณจะทำได้โดยใช้ for
loop ใน Python:
nums = [2,3,5,7] num_cubes = [] for num in nums: num_cubes.append(num**3) print(num_cubes) # Output [8, 27, 125, 343]
ในโค้ดด้านบนนี้ เรามีขั้นตอนดังนี้
- เริ่มต้นรายการว่าง
num_cubes
- วนผ่านรายการ
nums
- เข้าถึงแต่ละตัวเลข
num
และคำนวณลูกบาศก์โดยใช้ตัวดำเนินการยกกำลัง:num**3
- สุดท้าย ผนวกค่าคิวบ์เข้ากับรายการ
num_cubes
หมายเหตุ: ใน Python ตัวดำเนินการยกกำลัง
**
ใช้กับไวยากรณ์:num**pow
—จำนวนnum
ถูกยกขึ้นเป็น powerpow
อย่างไรก็ตาม คุณสามารถทำสิ่งนี้ได้ง่ายขึ้นโดยใช้การทำความเข้าใจรายการใน Python มาเรียนรู้ไวยากรณ์ของมันกัน
Python List Comprehension Syntax
ไวยากรณ์ทั่วไปสำหรับความเข้าใจรายการแสดงอยู่ด้านล่าง
<new_list> = [<expression> for <item> in <iterable>]
ลองแยกวิเคราะห์ไวยากรณ์ข้างต้น
- ใน Python รายการจะถูกคั่นด้วยวงเล็บเหลี่ยมคู่หนึ่ง
[]
ดังนั้นคุณต้องใส่คำสั่ง list comprehension ภายใน[]
-
<item>
ใน<iterable>
หมายความว่าคุณกำลังวนซ้ำผ่าน iterable ออบเจ็กต์ Python ใดๆ ที่คุณสามารถวนซ้ำและเข้าถึงแต่ละรายการได้ เช่น รายการ ทูเพิล และสตริง สามารถทำซ้ำได้ -
<expression>
คือผลลัพธ์ที่คุณต้องการคำนวณสำหรับทุก<item>
ใน<iterable>
และฟังดูง่ายใช่ไหม
โดยพื้นฐานแล้ว คุณต้องการ ทำ บางสิ่งกับรายการ ทั้งหมด ใน รายการ (หรือทำซ้ำได้) เพื่อรับ รายการใหม่
เมื่อใช้สิ่งนี้ เราสามารถลดความซับซ้อนของไวยากรณ์ ดังที่แสดงในภาพด้านล่าง

เมื่อคุณได้เรียนรู้ไวยากรณ์แล้ว ก็ถึงเวลาเริ่มเขียนโค้ด คุณสามารถใช้ Python IDE ออนไลน์ของ Geekflare เพื่อทำตามตัวอย่างเหล่านี้ได้ หรือคุณสามารถเรียกใช้บนเครื่องท้องถิ่นของคุณ
Python List Comprehension Examples
ในส่วนก่อนหน้านี้ คุณได้สร้างรายการใหม่ num_cubes
จาก nums
เริ่มจากการเขียนใหม่โดยใช้ list comprehension
การใช้รายการความเข้าใจกับตัวเลข
ตอนนี้ ลองใช้ไวยากรณ์แบบง่ายดังนี้:
-
<do-this>
: ที่นี่ คุณต้องลูกบาศก์แต่ละnum
ดังนั้นแทนที่<do-this>
ด้วยnum**3
-
<all-items>
: ตัวแปรการวนลูปคือnum
— ตัวเลขแต่ละตัวในรายการ -
<this-list>
: รายการที่มีอยู่ที่เรามีคือnums
- และ
[num**3 for num in nums]
คือนิพจน์สุดท้าย
เมื่อนำทั้งหมดมารวมกัน เรามีข้อมูลโค้ดต่อไปนี้:
num_cubes = [num**3 for num in nums] print(num_cubes) # Output [8, 27, 125, 343]
ขอแสดงความยินดี คุณได้เข้ารหัสความเข้าใจรายการแรกของคุณแล้ว
ต่อไป มาทำงานกับสตริง Python กัน
การใช้ List Comprehension กับ Strings
สมมติว่าคุณมี authors
รายชื่อ คุณสามารถเขียนรายการด้านล่างใหม่ร่วมกับผู้เขียนคนโปรดของคุณได้
authors = ["jane austen","george orwell","james clear","cal newport"]
สังเกตว่าชื่อผู้เขียนเป็นตัวพิมพ์เล็กในรายการด้านบนอย่างไร ตอนนี้ เราต้องการจัดรูปแบบในกรณีของ ชื่อ และจัดเก็บไว้ในรายการใหม่ที่เรียกว่า author_list
หมายเหตุ: ใน Python วิธีสตริง title() ยอมรับสตริงเป็นอาร์กิวเมนต์ และส่งกลับสำเนาของสตริงที่จัดรูปแบบในกรณีหัวเรื่อง นั่นคืออักษรตัวแรกของแต่ละคำเป็นตัวพิมพ์ใหญ่:
First-name Last-name
นี่คือทั้งหมดที่คุณต้องทำ:
- วนซ้ำผ่านรายชื่อ
authors
และสำหรับauthor
แต่ละคนในรายการ - เรียก
author.title()
เพื่อรับสำเนาของสตริงที่มีชื่อเรื่อง
และรหัส Python สำหรับสิ่งนี้แสดงอยู่ด้านล่าง:
authors = ["jane austen","george orwell","james clear","cal newport"] author_list = [author.title() for author in authors] print(author_list) # Output ['Jane Austen', 'George Orwell', 'James Clear', 'Cal Newport']
ในผลลัพธ์ข้างต้น ให้สังเกตว่าชื่อของผู้แต่งทั้งหมดได้รับการจัดรูปแบบในกรณีของชื่อเรื่องอย่างไร ซึ่งเป็นสิ่งที่เราต้องการ
การใช้การทำความเข้าใจรายการกับหลายรายการ
จนถึงตอนนี้ คุณได้เรียนรู้วิธีใช้การทำความเข้าใจรายการเพื่อสร้างรายการใหม่จากรายการที่มีอยู่แล้ว ตอนนี้ มาเรียนรู้วิธีสร้างรายการใหม่จากหลายรายการกัน

ตัวอย่างเช่น ลองพิจารณาปัญหานี้: คุณมีสองรายการ l_arr
และ b_arr
ที่มีความยาวและความกว้างของสี่เหลี่ยม 4 รูป
และคุณต้องสร้าง area
รายการใหม่ที่รวมพื้นที่ของสี่เหลี่ยมทั้ง 4 นี้ จำไว้ว่า area = length * breadth
l_arr = [4,5,1,3] b_arr = [2,1,7,9]
คุณจะต้องใช้องค์ประกอบจากทั้งสองรายการ ( l_arr
และ b_arr
) เพื่อคำนวณพื้นที่ และคุณสามารถทำได้โดยใช้ฟังก์ชัน zip()
ของ Python
หมายเหตุ: ใน Python ฟังก์ชัน
zip()
ใช้ iterables อย่างน้อยหนึ่งรายการเป็นอาร์กิวเมนต์ที่มีไวยากรณ์zip(*iterables)
จากนั้นจะส่งกลับ iterator ของ tuples โดยที่ tuplei
มีองค์ประกอบi
จาก iterables แต่ละรายการ
รูปภาพต่อไปนี้อธิบายสิ่งนี้โดยละเอียด คุณมี 4 ค่าใน l_arr
และ b_arr
ดังนั้นช่วงของดัชนีจึงอยู่ระหว่าง 0 ถึง 3 อย่างที่คุณเห็น tuple 0
มี l_arr[0]
และ b_arr[0]
, tuple 1
มี l_arr[1]
และ b_arr[1]
และอื่นๆ

ดังนั้น คุณสามารถวนซ้ำ zip(l_arr,b_arr)
ดังที่แสดงด้านล่าง:
area = [l*b for l,b in zip(l_arr,b_arr)] print(area) # Output [8,5,7,27]
ในส่วนถัดไป คุณจะได้เรียนรู้วิธีใช้คำสั่งแบบมีเงื่อนไขภายในความเข้าใจรายการ
Python List Comprehension พร้อม Condition Syntax
เริ่มต้นด้วยการสร้างไวยากรณ์ก่อนหน้าสำหรับความเข้าใจรายการ
นี่คือไวยากรณ์:
<new_list> = [<expression> for <item> in <iterable> if <condition>]
แทนที่จะคำนวณ <expression>
สำหรับรายการทั้งหมด คุณต้องการทำเฉพาะกับรายการที่ตรงตาม <condition>
เฉพาะ —where, condition := True
และสิ่งนี้นำไปสู่ไวยากรณ์ที่ง่ายขึ้นดังที่แสดง:

ด้วยเหตุนี้ เรามาดูตัวอย่างโค้ดกัน
Python List Comprehension พร้อมตัวอย่างเงื่อนไข
#1. คุณได้รับสตริง “ฉันกำลังเรียนรู้ Python ในปี 2022” คุณต้องการรับรายการตัวเลขทั้งหมดในสตริงนี้ แล้วคุณจะทำอย่างไร?
ใน Python
<char>.isdigit()
ทำหน้าที่กับอักขระ<char>
และคืนค่าTrue
หากเป็นตัวเลข (0-9); มิฉะนั้นจะส่งคืนFalse
ข้อมูลโค้ดด้านล่างแสดงวิธีรวบรวมรายการหลักทั้งหมดในสตริง str1
str1 = "I'm learning Python3 in 2022" digits = [char for char in str1 if char.isdigit()] print(digits) # Output ['3', '2', '0', '2', '2']
ในรหัสด้านบน:
- คุณวนผ่านสตริง
str1
, - เข้าถึงแต่ละตัว
char
เพื่อตรวจสอบว่าเป็นตัวเลขโดยใช้วิธีisdigit()
และ - เพิ่ม
char
ให้กับdigits
รายการใหม่เฉพาะเมื่อเป็นตัวเลขเท่านั้น
ลองมาอีกตัวอย่างหนึ่ง
#2. คุณมีรายการผลไม้ และคุณต้องการสร้างรายการ starts_with_b
ที่มีผลไม้ทั้งหมดจากรายการ fruits
ที่ขึ้นต้นด้วย b
คุณสามารถใช้วิธี startswith()
เพื่อเขียนเงื่อนไข
<str>.startswith('char')
คืนค่าTrue
ถ้า <str> ขึ้นต้นด้วย 'char'; มิฉะนั้นจะส่งคืนFalse
fruits = ['blueberry','apple','banana','orange','cherry'] starts_with_b = [fruit for fruit in fruits if fruit.startswith('b')] print(starts_with_b) # Output ['blueberry', 'banana']
ในผลลัพธ์ข้างต้น เราได้ 'blueberry'
และ 'banana'
ซึ่งเป็นผลไม้สองชนิดที่ขึ้นต้นด้วย 'b'
ในรายการ fruits
ตามที่เราคาดไว้
และนั่นเป็นการสรุปการสนทนาของเราเกี่ยวกับความเข้าใจรายการ
บทสรุป
ฉันหวังว่าบทช่วยสอนนี้จะช่วยให้คุณเข้าใจรายการความเข้าใจใน Python
มาสรุปกัน:
- คุณสามารถใช้ [<do this> for <all-items> ใน <this-list>] เพื่อสร้างรายการใหม่โดยใช้ list comprehension
- นอกจากนี้ คุณสามารถใช้ไวยากรณ์ [<do this> for <all-items> ใน <this-list> if <condition-is-True>] กับคำสั่งเงื่อนไข
if
นอกจากนี้ คุณได้เขียนโค้ดตัวอย่างไว้หลายตัวอย่าง ในขั้นตอนต่อไป คุณสามารถลองเขียนลูป Python ที่มีอยู่ใหม่บางส่วนเพื่อสร้างรายการโดยใช้การทำความเข้าใจรายการ มีความสุขในการเข้ารหัส! จนถึงการกวดวิชาต่อไป
ตอนนี้คุณสามารถดูวิธีแปลงรายการเป็นพจนานุกรมหรือเรียนรู้วิธีจัดการไฟล์ใน Python