แสดงรายการความเข้าใจใน 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 ถูกยกขึ้นเป็น power pow

อย่างไรก็ตาม คุณสามารถทำสิ่งนี้ได้ง่ายขึ้นโดยใช้การทำความเข้าใจรายการใน Python มาเรียนรู้ไวยากรณ์ของมันกัน

Python List Comprehension Syntax

ไวยากรณ์ทั่วไปสำหรับความเข้าใจรายการแสดงอยู่ด้านล่าง

 <new_list> = [<expression> for <item> in <iterable>]

ลองแยกวิเคราะห์ไวยากรณ์ข้างต้น

  • ใน Python รายการจะถูกคั่นด้วยวงเล็บเหลี่ยมคู่หนึ่ง [] ดังนั้นคุณต้องใส่คำสั่ง list comprehension ภายใน []
  • <item> ใน <iterable> หมายความว่าคุณกำลังวนซ้ำผ่าน iterable ออบเจ็กต์ Python ใดๆ ที่คุณสามารถวนซ้ำและเข้าถึงแต่ละรายการได้ เช่น รายการ ทูเพิล และสตริง สามารถทำซ้ำได้
  • <expression> คือผลลัพธ์ที่คุณต้องการคำนวณสำหรับทุก <item> ใน <iterable>

และฟังดูง่ายใช่ไหม

โดยพื้นฐานแล้ว คุณต้องการ ทำ บางสิ่งกับรายการ ทั้งหมด ใน รายการ (หรือทำซ้ำได้) เพื่อรับ รายการใหม่

เมื่อใช้สิ่งนี้ เราสามารถลดความซับซ้อนของไวยากรณ์ ดังที่แสดงในภาพด้านล่าง

list-comprehension-syntax
Python List Comprehension Syntax (รูปภาพโดยผู้เขียน)

เมื่อคุณได้เรียนรู้ไวยากรณ์แล้ว ก็ถึงเวลาเริ่มเขียนโค้ด คุณสามารถใช้ 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 โดยที่ tuple i มีองค์ประกอบ 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] และอื่นๆ

python-zip-function
ฟังก์ชัน Python zip () (รูปภาพโดยผู้เขียน)

ดังนั้น คุณสามารถวนซ้ำ 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 และสิ่งนี้นำไปสู่ไวยากรณ์ที่ง่ายขึ้นดังที่แสดง:

list-comprehension-with-condition-syntax
Python List Comprehension พร้อม Condition Syntax (รูปภาพโดยผู้แต่ง)

ด้วยเหตุนี้ เรามาดูตัวอย่างโค้ดกัน

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