Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Flatten List:A How-To Guide

การทำให้รายการแบนราบหมายถึงกระบวนการลบมิติออกจากรายการ มิติหมายถึงพิกัดเพิ่มเติมที่จำเป็นในการค้นหารายการในรายการ คุณสามารถทำให้รายการ Python เรียบขึ้นโดยใช้ list comprehension, nested for loop หรือ itertools.chain() วิธีการ

รายการ Python สามารถมีได้หลายมิติ ซึ่งหมายความว่าคุณมีรายการอยู่ภายในรายการ รายการเหล่านี้ ซึ่งบางครั้งเรียกว่า "รายการที่ซ้อนกัน" สามารถแปลงกลับเป็นรายการปกติได้

ซึ่งหมายความว่าคุณสามารถย้ายค่าทั้งหมดจากรายการภายในรายการไปยังรายการเดียวได้ การเปลี่ยนรายการเป็นรายการเรียกว่า "การทำให้รายการเรียบ"

รายการหลามเรียบ

มีสามวิธีในการทำให้รายการ Python เรียบ:

  • การใช้ความเข้าใจรายการ
  • การใช้การวนซ้ำซ้อน
  • การใช้เมธอด itertools.chain()

ในคู่มือนี้ เราจะพูดถึงวิธีการแผ่รายการโดยใช้ list comprehension, a for loop และ itertools.chain() กระบวนการ. เราอธิบายสองตัวอย่างเพื่อให้คุณสามารถเริ่มรวมรายการในโปรแกรมของคุณเองได้

Python:ทำให้รายการเรียบขึ้นโดยใช้ List Comprehension

ความเข้าใจรายการ Python กำหนดรายการตามเนื้อหาของรายการที่มีอยู่ คุณสามารถปรับแต่งแต่ละองค์ประกอบที่เข้าสู่รายการใหม่ของคุณโดยระบุเงื่อนไขหรือการเปลี่ยนแปลงภายในความเข้าใจ

ความเข้าใจคือวากยสัมพันธ์สำหรับการใช้ for วนซ้ำเพื่อวนซ้ำในรายการและสร้างรายการใหม่ ซึ่งหมายความว่าทำงานในลักษณะพื้นฐานเดียวกันกับ for loop แต่ใช้ไวยากรณ์ต่างกัน

นี่คือไวยากรณ์สำหรับความเข้าใจรายการ:

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

numbers = [1, 2, 3]

new_numbers = [number * 2 for number in numbers]

ความเข้าใจนี้จะคูณตัวเลขแต่ละรายการในรายการ "ตัวเลข" ด้วย 2

รายการแบบเรียบ:รายการตัวอย่างความเข้าใจ

เรามีรายการไส้แซนวิชต่างๆ ที่มีจำหน่ายที่ร้านอาหาร ขณะนี้ รายการของเรามีลักษณะดังนี้:

foods = [
	["Tomato and Cucumber", "Hummus, Beetroot, and Lettuce"],
	["Cheese", "Egg"],
	["Ham", "Bacon", "Chicken Club", "Tuna"]
]

รายการแรกประกอบด้วยไส้แซนวิชมังสวิรัติ รายการที่สองประกอบด้วยไส้แซนวิชมังสวิรัติ รายการที่สามประกอบด้วยไส้แซนวิชทั้งหมดที่มีเนื้อสัตว์

เราต้องการเปลี่ยนรายการนี้เป็นรายการอาหารรายการเดียว การทำงานกับรายการที่มีมิติเดียวแทนที่จะเป็นสองมิติจะง่ายกว่า ไม่จำเป็นต้องมีมากกว่าหนึ่งมิติในรายการนี้ หากต้องการลบมิติที่ 2 ออกจากรายการ เราสามารถใช้ list comprehension:

new_foods = [food for sublist in foods for food in sublist]
print(new_foods)

ความเข้าใจรายการนี้จะวนซ้ำทุกรายการในตัวแปร Python "อาหาร" แต่ละค่าจะถูกเพิ่มลงในรายการหลัก เมื่อรายการของเราถูกสร้างขึ้น เราจะพิมพ์ไปยังคอนโซล

มาดูโค้ดของเรากันว่าจะเกิดอะไรขึ้น:

['Tomato and Cucumber', 'Hummus, Beetroot, and Lettuce', 'Cheese', 'Egg', 'Ham', 'Bacon', 'Chicken Club', 'Tuna']

รายการของเราได้รับการแปลงเป็นรายการแบบเรียบสำเร็จแล้ว ส่วนผสมทั้งหมดจะปรากฏในรายการเดียวแทนที่จะเป็นสามรายการ

Python:แผ่รายการโดยใช้ Nested For Loop

เรายังได้ผลลัพธ์เดียวกันนี้โดยใช้ Python for loop ที่ซ้อนกัน "Nested for loop" เป็นอีกวิธีหนึ่งในการพูดว่า "a for loop ภายใน for loop" ความเข้าใจรายการของเราเป็นอีกวิธีหนึ่งในการแสดงลูปต่อไปนี้:

new_foods = []
for sublist in foods:
	for food in sublist:
		new_foods.append(food)

print(new_foods)

รหัสของเราใช้สองลูปเพื่อวนซ้ำแต่ละรายการในแต่ละรายการในรายการเดิมของรายการ เรียกใช้รหัสของเรา:

['Tomato and Cucumber', 'Hummus, Beetroot, and Lettuce', 'Cheese', 'Egg', 'Ham', 'Bacon', 'Chicken Club', 'Tuna']

โปรแกรมของเราส่งคืนผลลัพธ์เดียวกันกับความเข้าใจในรายการของเรา ในกรณีส่วนใหญ่ ความเข้าใจรายการเป็นทางออกที่ดีกว่าการวนรอบ ความเข้าใจรายการสั้นกว่า และในกรณีนี้ อ่านได้ง่ายกว่าการวนซ้ำที่ซ้อนกัน

Python:ขยายรายการโดยใช้ Itertools

Itertools เป็นโมดูลในไลบรารีมาตรฐาน Python โมดูลนี้มีวิธีการต่างๆ มากมาย ทำให้ง่ายต่อการทำงานกับอ็อบเจ็กต์และตัวสร้างที่ทำซ้ำได้

เพื่อจุดประสงค์ของเรา เราอ้างอิงถึง chain() . เท่านั้น กระบวนการ. เมธอดนี้ยอมรับรายการและส่งคืนรายการแบบเรียบ

เริ่มต้นด้วยการนำเข้าโมดูล itertools ลงในโค้ดของเราโดยใช้คำสั่งนำเข้า Python:

import itertools

ถัดไป กำหนดรายการและใช้ chain() วิธีการแผ่รายการ:

foods = [
	["Tomato and Cucumber", "Hummus, Beetroot, and Lettuce"],
	["Cheese", "Egg"],
	["Ham", "Bacon", "Chicken Club", "Tuna"]
]

new_foods = itertools.chain(*foods)

ในรหัสของเรา เราใช้สัญลักษณ์ * เพื่อแกะรายการของเรา สิ่งนี้จะแปลงรายการของเราเป็นอาร์กิวเมนต์ของฟังก์ชันที่สามารถแยกวิเคราะห์โดย chain() วิธีการ

chain() เมธอดส่งคืนอ็อบเจ็กต์ itertools.chain หากต้องการดูรายการที่แบน เราต้องแปลงวัตถุนี้เป็นรายการ เราทำสิ่งนี้โดยใช้ list() วิธีการ:

print(list(new_foods))

มารันโค้ดของเรากัน:

['Tomato and Cucumber', 'Hummus, Beetroot, and Lettuce', 'Cheese', 'Egg', 'Ham', 'Bacon', 'Chicken Club', 'Tuna']

รหัสของเราทำให้รายการของเราแบนราบ

แม้ว่า itertools เป็นวิธีที่มีประสิทธิภาพในการทำให้รายการเรียบเรียง แต่ก็ล้ำหน้ากว่าสองวิธีล่าสุดที่เราได้พูดคุยกัน

เนื่องจากคุณต้องนำเข้า itertools ลงในโค้ดของคุณซึ่งแนะนำการพึ่งพาใหม่ ยิ่งไปกว่านั้น chain() วิธีการเกี่ยวข้องกับการเปิดออกซึ่งอาจเข้าใจยาก

บทสรุป

คุณสามารถทำให้รายการ Python เรียบขึ้นโดยใช้ list comprehension, nested for loop และวิธีการ itertools.chain() ความเข้าใจรายการเป็นวิธี "Pythonic" มากที่สุด ดังนั้นจึงเป็นที่นิยมในกรณีส่วนใหญ่

แม้ว่าการซ้อนสำหรับลูปจะมีประสิทธิภาพ แต่จะใช้บรรทัดของโค้ดมากกว่าการทำความเข้าใจรายการ วิธีการ itertools.chain() มีประสิทธิภาพใกล้เคียงกัน แต่อาจเป็นเรื่องยากสำหรับผู้เริ่มต้นที่จะเข้าใจ

โดยปกติไม่จำเป็นต้องนำเข้าไลบรารีใหม่ — itertools — เมื่อ Python มีเครื่องมือทั้งหมดที่คุณต้องการเพื่อทำให้รายการเรียบขึ้น

คุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Python หรือไม่? ดูคู่มือ How to Learn Python ฉบับสมบูรณ์ของเรา คุณจะพบเคล็ดลับการเรียนรู้ของผู้เชี่ยวชาญ รวมถึงรายชื่อหลักสูตรและหนังสือชั้นนำที่คุณสามารถเรียนรู้ได้