แสดงรายการความเข้าใจใน Python

List Comprehensions Python



ความเข้าใจรายการมักใช้ใน Python เพื่อเขียนคำสั่งบรรทัดเดียวที่สร้างรายการหรือพจนานุกรมใหม่โดยการวนซ้ำวัตถุที่ทำซ้ำได้ บทความนี้จะอธิบายวิธีใช้ list comprehensions ใน Python โดยเริ่มจากคำอธิบายเบื้องต้นเกี่ยวกับการทำงานของ loop ใน Python

สำหรับวนซ้ำใน Python

คำสั่ง for loop ใน Python จะวนซ้ำสมาชิกของอ็อบเจ็กต์ รายการ สตริง ฯลฯ ตามลำดับ เมื่อเทียบกับภาษาโปรแกรมอื่นๆ ไวยากรณ์ของมันจะสะอาดกว่ามากและไม่ต้องการการกำหนดขั้นตอนการวนซ้ำและการเริ่มต้นการวนซ้ำด้วยตนเอง แม้ว่าจะมีวิธีที่จะทำให้ลักษณะการทำงานเหมือนกับภาษาโปรแกรมอื่นๆ (จะไม่ครอบคลุมในบทความนี้) คุณยังสามารถใช้การควบคุมลูปโดยใช้คำสั่งเช่น Continue, break, pass เป็นต้น ด้านล่างนี้เป็นตัวอย่างง่ายๆ ของ for loop ใน Python:







สำหรับNSใน พิสัย(10):
พิมพ์(NS)

for loop ด้านบนจะพิมพ์ตัวเลขสิบตัวเริ่มต้นจาก 0 และสิ้นสุดที่ 9



แสดงรายการความเข้าใจ

ความเข้าใจรายการเป็นเพียงวิธีการจดชวเลข / รัดกุมในการเขียนหลายบรรทัดสำหรับลูปในคำสั่งบรรทัดเดียว ตัวอย่างการทำความเข้าใจรายการด้านล่างจะสร้างรายการใหม่เป็น [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] โดยรวมค่าทั้งหมดของ x ไว้ด้วย



ตัวเลข= [NSสำหรับNSใน พิสัย(10)]
พิมพ์ (ตัวเลข)

โปรดทราบว่าการทำความเข้าใจรายการจะสร้างรายการใหม่เสมอและจะไม่แก้ไขการทำซ้ำเดิมที่ใช้ในนิพจน์ นิพจน์ความเข้าใจรายการทั่วไปต้องมี for และสามารถตามด้วยคำสั่งเงื่อนไข if และ else โดยไม่ใช้ความเข้าใจรายการ ตัวอย่างข้างต้นจะถูกเขียนในลักษณะดังต่อไปนี้:





ตัวเลข= []
สำหรับNSใน พิสัย(10):
ตัวเลขผนวก(NS)

พิมพ์ (ตัวเลข)

ประสิทธิภาพและความสามารถในการอ่าน

ความเข้าใจรายการเร็วกว่าการวนซ้ำ อย่างไรก็ตาม คุณจะไม่สังเกตเห็นการปรับปรุงประสิทธิภาพที่สำคัญ เว้นแต่คุณจะทำซ้ำหลายแสนรายการ แม้ว่าการเข้าใจรายการจะเป็นวิธีที่กระชับในการเขียนลูป แต่นิพจน์ที่ซับซ้อนอาจทำให้โค้ดอ่านได้ไม่ดีและมีการใช้คำฟุ่มเฟือยเพิ่มขึ้น สิ่งสำคัญคือต้องทำให้โค้ดสามารถอ่านได้ เว้นแต่ว่าการบรรลุประสิทธิภาพสูงสุดนั้นจำเป็นอย่างยิ่งสำหรับโปรแกรมของคุณ

ตัวอย่าง: การใช้ไวยากรณ์ List Comprehensions กับ Dictionaries and Sets

พจนานุกรมหลามคือชุดขององค์ประกอบที่กำหนดไว้ในคู่คีย์-ค่า ในขณะที่ชุดคือชุดของค่าที่ไม่ซ้ำกันซึ่งไม่อนุญาตให้ทำซ้ำ ความเข้าใจรายการสามารถใช้กับพจนานุกรมและชุดของ Python ได้เช่นกัน ไวยากรณ์แตกต่างกันเล็กน้อย แทนที่จะปิดนิพจน์ในวงเล็บเหลี่ยม ตอนนี้คุณจะต้องใช้วงเล็บปีกกา คุณยังจะได้รับพจนานุกรมใหม่ / ชุดวัตถุแทนรายการใหม่



ข้อมูล= {'เมือง':'นิวยอร์ก', 'ชื่อ':'จอห์น โด'}

formatted_data= {เค: ว.ชื่อ() สำหรับถึง,วีในข้อมูล.รายการ()}

พิมพ์ (formatted_data)

ตัวอย่างข้างต้นจะแปลงค่าสตริงเป็นตัวพิมพ์ชื่อเรื่อง และสร้างพจนานุกรมใหม่ชื่อ formatted_data ซึ่งผลลัพธ์จะเป็น: {'city': 'New York', 'name': 'John Doe'} คุณยังสามารถเปลี่ยนพจนานุกรม / ตั้งค่าแทนที่ได้โดยการระบุตัวแปรพจนานุกรมที่มีอยู่ทางด้านซ้ายมือ

ข้อมูล= {'เมือง':'นิวยอร์ก', 'ชื่อ':'จอห์น โด'}

ข้อมูล= {เค: ว.ชื่อ() สำหรับถึง,วีในข้อมูล.รายการ()}

พิมพ์ (ข้อมูล)

หากไม่มีความเข้าใจในพจนานุกรม โค้ดจะมีลักษณะดังนี้:

ข้อมูล= {'เมือง':'นิวยอร์ก', 'ชื่อ':'จอห์น โด'}

formatted_data= {}

สำหรับถึง,วีในข้อมูล.รายการ():
formatted_data[ถึง] =วีชื่อ()

พิมพ์ (formatted_data)

เนื่องจากไม่มีคู่คีย์-ค่าในชุด ความเข้าใจชุดสามารถกำหนดในลักษณะเดียวกับความเข้าใจรายการ ข้อแตกต่างเพียงอย่างเดียวคือการใช้เครื่องมือจัดฟันแบบหยิก

ตัวอย่าง: Multiple For Loops ใน List Comprehension

ตัวอย่างความเข้าใจรายการดังกล่าวข้างต้นเป็นพื้นฐานและใช้คำสั่งเดียว ด้านล่างนี้เป็นตัวอย่างที่ใช้หลายลูปและคำสั่งเงื่อนไข if

คำคุณศัพท์= ['ดิสก์', 'อีอัน', 'โฟกัส', 'เก่ง']

สัตว์= ['ดิงโก้', 'เออร์มีน', 'หลุม', 'บีเวอร์']

ชื่อรหัส= [x +''+ และสำหรับNSในคำคุณศัพท์สำหรับและในสัตว์ถ้าและ.เริ่มต้นด้วย(NS[0])]

พิมพ์ (ชื่อรหัส)

รหัสจะแสดง ['Disco Dingo', 'Eoan Ermine', 'Focal Fossa'] เป็นเอาต์พุต two for loops ใช้แทนคำคุณศัพท์และรายชื่อสัตว์ และสมาชิกจะรวมกันโดยใช้ช่องว่าง เฉพาะในกรณีที่อักษรตัวแรกของทั้งสองคำเหมือนกัน หากไม่ใช้การทำความเข้าใจรายการ โค้ดจะมีลักษณะดังนี้:

คำคุณศัพท์= ['ดิสก์', 'อีอัน', 'โฟกัส', 'เก่ง']
สัตว์= ['ดิงโก้', 'เออร์มีน', 'หลุม', 'บีเวอร์']

ชื่อรหัส= []

สำหรับNSในคำคุณศัพท์:
สำหรับและในสัตว์:
ถ้าและ.เริ่มต้นด้วย(NS[0]):
ชื่อรหัสผนวก(x +''+ และ)

พิมพ์ (ชื่อรหัส)

ตัวอย่าง: List Comprehension with if-else Clause

ตัวอย่างด้านล่างจะแสดงการใช้คำสั่ง if และ else ในการทำความเข้าใจรายการ

number_list= [1, 2, 3, 4]
another_list= [5, 6, 7, 8]

ผลลัพธ์= [จริง ถ้า (x + y)%2 == 0 อื่น เท็จ สำหรับNSในnumber_listสำหรับและในanother_list]

พิมพ์ (ผลลัพธ์)

ในขณะที่วนซ้ำสองรายการ ความเข้าใจของรายการด้านบนจะตรวจสอบว่าผลรวมของคู่ขององค์ประกอบเป็นคู่หรือไม่ การเรียกใช้โค้ดด้านบนจะแสดงให้คุณเห็น [True, False, True, False, False, True, False, True, True, False, True, False, False, True, False, True] เป็นเอาต์พุต หากไม่ใช้การทำความเข้าใจรายการ โค้ดจะมีลักษณะดังนี้:

number_list= [1, 2, 3, 4]
another_list= [5, 6, 7, 8]
ผลลัพธ์= []

สำหรับNSในnumber_list:
สำหรับและในanother_list:
ถ้า (x + y)%2 == 0:
ผลลัพธ์.ผนวก(จริง)
อื่น:
ผลลัพธ์.ผนวก(เท็จ)

พิมพ์ (ผลลัพธ์)

บทสรุป

List comprehensions เป็นวิธีที่ดีในการเขียนคำสั่ง loop ที่ชัดเจนและกระชับ อย่างไรก็ตาม อาจซับซ้อนและเข้าใจยากได้อย่างรวดเร็วหากใช้หลายลูปและคำสั่งแบบมีเงื่อนไข ในท้ายที่สุด มันมาถึงระดับความสะดวกสบายของโปรแกรมเมอร์ แต่โดยทั่วไป จะเป็นความคิดที่ดีที่จะเขียนโค้ดที่ชัดเจน อ่านได้ และดีบักได้ง่าย แทนที่จะใช้การจดชวเลขมากเกินไป