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

วิธีลบรายการซ้ำออกจาก List ใน Python

คุณสามารถลบรายการซ้ำจาก Python ได้โดยใช้ dict.fromkeys() ซึ่งสร้างดิกชันนารีที่ลบค่าซ้ำออก คุณยังสามารถแปลงรายการเป็นเซ็ต (set) ได้ คุณต้องแปลงดิกชันนารีหรือเซ็ตกลับเป็นรายการเพื่อดูรายการที่ลบรายการซ้ำแล้ว


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

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

Python ลบรายการซ้ำจากรายการ

คุณสามารถลบรายการซ้ำโดยใช้เซ็ตของ Python หรือเมธอด dict.fromkeys()

เมธอด dict.fromkeys() แปลงรายการเป็นดิกชันนารี ดิกชันนารีไม่สามารถมีค่าซ้ำได้ ดังนั้นดิกชันนารีที่มีค่าเฉพาะที่ไม่ซ้ำกันจึงถูกคืนค่าโดย dict.fromkeys()

เซ็ต (Sets) เหมือนกับดิกชันนารี ไม่สามารถมีค่าซ้ำได้ หากเราแปลงรายการเป็นเซ็ต รายการซ้ำทั้งหมดจะถูกลบออก

Python ลบรายการซ้ำจาก List: dict.fromkeys()

ดิกชันนารี Python จัดเก็บข้อมูลในโครงสร้างคีย์/ค่า (key/value structure) ดิกชันนารีแมปคีย์ไปยังค่าและสร้างคู่ที่จัดเก็บข้อมูลใน Python

ดิกชันนารีใน Python ไม่สามารถรวมคีย์ซ้ำได้ หากเราแปลงรายการของเราเป็นดิกชันนารี มันจะลบค่าซ้ำออก นี่คือที่มาของเมธอด fromkeys()

ตัวอย่าง dict.fromkeys()

fromkeys() เป็นฟังก์ชันในตัว (built-in function) ที่สร้างดิกชันนารีจากคีย์ที่คุณระบุ เนื่องจากดิกชันนารีไม่สามารถรวมคีย์ซ้ำได้ ฟังก์ชันนี้จะลบค่าซ้ำจากรายการของเราออก แล้วเราสามารถแปลงดิกชันนารีของเรากลับเป็นรายการได้

ไวยากรณ์สำหรับเมธอด fromkeys() มีดังนี้:

dictionary_name.fromkeys(keys, value)

fromkeys รับสองพารามิเตอร์: keys และ value พารามิเตอร์ keys คือ iterable ซึ่งระบุคีย์ของดิกชันนารีใหม่ที่คุณต้องการสร้าง พารามิเตอร์ value ของเราเป็นทางเลือกและเก็บค่าสำหรับคีย์ทั้งหมด เราไม่ต้องการพารามิเตอร์นี้สำหรับตัวอย่างนี้ ดังนั้นเราจะละเว้นมัน

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

เพื่อลบรายการซ้ำที่อาจมีอยู่ในเมนูใหม่ เราสามารถใช้โค้ดต่อไปนี้:

new_menu = ['Hawaiian', 'Margherita', 'Mushroom', 'Prosciutto', 'Meat Feast', 'Hawaiian', 'Bacon', 'Black Olive Special', 'Sausage', 'Sausage']
final_new_menu = list(dict.fromkeys(new_menu))
print(final_new_menu)

โค้ดของเราลบองค์ประกอบซ้ำของเราออกและคืนค่า:

['Hawaiian', 'Margherita', 'Mushroom', 'Prosciutto', 'Meat Feast', 'Bacon', 'Black Olive Special', 'Sausage']

ในบรรทัดแรก เราประกาศตัวแปร Python ชื่อ new_menu ซึ่งจัดเก็บพิซซ่าทั้งหมดบนเมนูใหม่ โปรดสังเกตว่ารายการนี้มีค่าซ้ำ — ทั้ง Sausage และ Hawaiian ปรากฏสองครั้งในรายการ Python

เราใช้เมธอด dict.fromkeys() เพื่อสร้างดิกชันนารีจากตัวแปร new_menu ของเรา ต่อไป เราใช้ list() เพื่อแปลงข้อมูลของเราจากดิกชันนารีเป็นอาร์เรย์ Python หรือรายการ ในบรรทัดสุดท้ายของโค้ด เราพิมพ์รายการที่แก้ไขแล้วของเรา

ตามที่คุณเห็น โปรแกรมของเราได้ลบค่าซ้ำจากข้อมูลของเรา และ Sausage และ Hawaiian ปรากฏครั้งเดียวในรายการใหม่ของเรา

ลบรายการซ้ำจาก List Python: เซ็ต (Sets)

ออบเจ็กต์เซ็ตของ Python เป็นโครงสร้างข้อมูลที่ ไม่มีลำดับ (unordered) และ ไม่มีดัชนี (unindexed) เซ็ตจัดเก็บชุดของรายการที่ไม่ซ้ำกันใน Python ไม่เหมือนรายการ เซ็ตไม่สามารถจัดเก็บค่าซ้ำได้

ดังนั้น เนื่องจากเซ็ตไม่สามารถจัดเก็บรายการซ้ำได้ เราสามารถแปลงรายการของเราเป็นเซ็ตเพื่อลบพวกมันออก ใน Python เซ็ตเป็นรายการของรายการที่คั่นด้วยเครื่องหมายจุลภาคล้อมรอบด้วยวงเล็บปีกกา นี่คือตัวอย่างของเซ็ตใน Python ที่จัดเก็บรายการพิซซ่า:

pizzas = ('Margherita', 'Hawaiian', 'Mushroom', 'Meat Feast')

ตัวอย่างการลบรายการซ้ำโดยใช้เซ็ต

มาใช้ตัวอย่างของเราจากข้างต้นเพื่อแสดงให้เห็นว่าจะใช้เซ็ตลบค่าซ้ำจากรายการได้อย่างไร

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

new_menu = ['Hawaiian', 'Margherita', 'Mushroom', 'Prosciutto', 'Meat Feast', 'Hawaiian', 'Bacon', 'Black Olive Special', 'Sausage', 'Sausage']
final_new_menu = list(set(new_menu))
print(final_new_menu)

นี่คือรายการของเราหลังจากลบค่าซ้ำ:

['Mushroom', 'Black Olive Special', 'Meat Feast', 'Bacon', 'Margherita', 'Sausage', 'Prosciutto', 'Hawaiian']

ในตอนต้นของโปรแกรมของเรา เราประกาศรายการชื่อ new_menu ซึ่งจัดเก็บพิซซ่าทั้งหมดบนเมนูใหม่

จากนั้น เราประกาศตัวแปรชื่อ final_new_menu ซึ่งจัดเก็บเมนูที่แก้ไขแล้ว ตัวแปรนี้แปลงตัวแปร new_menu เป็นเซ็ตโดยใช้ set() จากนั้นแปลงเซ็ตกลับเป็นรายการโดยใช้ list() กระบวนการนี้ลบค่าซ้ำทั้งหมดในตัวแปร new_menu ของเรา

สุดท้าย โปรแกรมของเราพิมพ์เมนูใหม่ไปที่คอนโซล องค์ประกอบที่ไม่ซ้ำกันทั้งหมดจากออบเจ็กต์รายการต้นฉบับปรากฏ ตอนนี้เรามีรายการที่ไม่ซ้ำกันแล้ว

สรุป

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

ในคู่มือนี้ เราอภิปรายวิธีใช้ฟังก์ชัน fromkeys() ของดิกชันนารีและเซ็ตเพื่อลบรายการซ้ำจากรายการใน Python

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนโปรแกรม Python โปรดอ่านคู่มือ How to Learn Python ของเรา