5 วิธีในการลบรายการที่ซ้ำกันออกจากรายการ Python

เผยแพร่แล้ว: 2022-07-05

ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธี ลบรายการที่ซ้ำกันออกจากรายการ Python

เมื่อคุณทำงานกับรายการใน Python บางครั้งคุณอาจต้องทำงานกับรายการที่ไม่ซ้ำในรายการ – โดยการลบรายการที่ซ้ำกัน

มีสองสามวิธีที่คุณสามารถทำได้ ในบทช่วยสอนนี้ เราจะพูดถึงห้าเทคนิคดังกล่าว

พื้นฐานของรายการ Python

มาเริ่มการสนทนากันโดยทบทวนพื้นฐานของรายการ Python

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

ดังนั้นคุณจะเก็บเฉพาะ องค์ประกอบที่ไม่ซ้ำกัน และ ลบ องค์ประกอบที่ ซ้ำกัน หรือทำซ้ำได้อย่างไร

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

เราจะเรียนรู้รายละเอียดเหล่านี้ในบทช่วยสอนนี้

วิธีการลบรายการที่ซ้ำกันออกจากรายการ Python

มาดูตัวอย่างในโลกแห่งความเป็นจริงกัน สมมติว่าคุณอยู่ที่งานวันเกิดเพื่อน

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

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

มาสร้างรายการ sweets ที่มีรายการทั้งหมดในภาพด้านบนกัน

 sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]

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

วนซ้ำรายการ Python เพื่อลบรายการที่ซ้ำกัน

วิธีที่ตรงไปตรงมาที่สุดคือการสร้างรายการใหม่ที่มีแต่ละรายการเพียงครั้งเดียว

อ่านผ่านเซลล์รหัสด้านล่าง:

 unique_sweets = [] for sweet in sweets: if sweet not in unique_sweets: unique_sweets.append(sweet) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
  • เราเริ่มต้นรายการว่าง unique_sweets
  • ขณะวน sweets list เราเข้าถึงแต่ละรายการ sweet
  • หากยังไม่มี sweet อยู่ในรายการ unique_sweets เราจะเพิ่มมันเข้าไปที่ส่วนท้ายของรายการ unique_sweets โดยใช้เมธอด . .append()

สมมติว่าคุณเจอสิ่งของที่ซ้ำกัน ตัวอย่างเช่น การเกิดขึ้นครั้งที่สองของ 'ขนม' ในรายการ sweets สิ่งนี้ไม่ได้ถูกเพิ่มลงในรายการ unique_sweets เนื่องจากมีอยู่แล้ว: sweet not in unique_sweets ประเมินเป็น False สำหรับการเกิดขึ้นครั้งที่สองของ 'cupcake' และ 'candy'

ดังนั้น ในวิธีนี้ ทุกไอเท็มจะเกิดขึ้นเพียงครั้งเดียวในรายการ unique_sweets โดยไม่มีการซ้ำกัน

ใช้ความเข้าใจรายการเพื่อลบรายการที่ซ้ำกัน

คุณยังสามารถใช้การทำความเข้าใจรายการเพื่อเติมรายการ unique_sweets

ต้องการรีเฟรชพื้นฐานของความเข้าใจรายการหรือไม่

️ ดูบทช่วยสอนเกี่ยวกับความเข้าใจรายการใน Python

ลองใช้ list comprehension expression: [output for item in iterable if condition is True] เพื่อเขียนลูปด้านบนใหม่อย่างกระชับ

 unique_sweets = [] [unique_sweets.append(sweet) for sweet in sweets if sweet not in unique_sweets] print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

แม้ว่าคุณกำลังสร้างรายการใหม่ คุณจะไม่ได้ใส่ค่าในรายการที่สร้างไว้ เนื่องจากผลลัพธ์คือการดำเนินการ . .append() ของรายการ unique_sweets

หากต้องการลบรายการที่ซ้ำกันออกจากรายการ Python คุณสามารถใช้เมธอดรายการในตัว และเราจะกล่าวถึงในส่วนถัดไป

ใช้วิธีรายการในตัวเพื่อลบรายการที่ซ้ำกัน

คุณสามารถใช้เมธอดรายการ Python .count() และ .remove() เพื่อลบรายการที่ซ้ำกัน

– ด้วยไวยากรณ์ list.count(value) วิธีการ .count() จะส่งกลับจำนวนครั้ง value เกิดขึ้นใน list ดังนั้นจำนวนที่ตรงกับรายการที่ทำซ้ำจะมากกว่า 1

list.remove(value) ลบค่าที่เกิดขึ้นครั้งแรกออกจากรายการ

ใช้ข้างต้นเรามีรหัสต่อไปนี้

 for sweet in sweets: # check if the count of sweet is > 1 (repeating item) if sweets.count(sweet) > 1: # if True, remove the first occurrence of sweet sweets.remove(sweet) print(sweets) # Output ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

เนื่องจากวิธีการ .remove() จะลบ เฉพาะ การเกิดขึ้นครั้งแรกของค่า คุณจึงไม่สามารถใช้เพื่อลบรายการที่เกิดขึ้นมากกว่าสองครั้ง

  • หากรายการใดรายการหนึ่งซ้ำกัน (เกิดขึ้นสองครั้งพอดี) วิธีนี้จะลบรายการแรกออก
  • หากรายการใดรายการหนึ่งถูกทำซ้ำ K ครั้ง หลังจากรันโค้ดด้านบน การทำซ้ำ K-1 จะยังคงอยู่

แต่โดยทั่วไป เมื่อเราพูดถึงการซ้ำซ้อน เรามักจะอ้างถึงการทำซ้ำ ทั้งหมด

ในการจัดการกรณีนี้ คุณสามารถแก้ไขการวนซ้ำด้านบนเพื่อลบการทำซ้ำทั้งหมดยกเว้นหนึ่งรายการ แทนที่จะใช้ if conditional เพื่อตรวจสอบการนับของรายการใดรายการหนึ่ง คุณสามารถรัน a while loop เพื่อลบการซ้ำกันซ้ำๆ จนกว่าจำนวนของทุกรายการในรายการจะเป็น 1

รายการ sweets ตอนนี้มี 'คัพเค้ก' 2 ซ้ำและ 'ขนม' 3 ซ้ำ

 sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]

คุณสามารถใช้ while loop เพื่อลบการซ้ำซ้อน ดังที่แสดงด้านล่าง while loop จะทำงานต่อไปตราบเท่าที่จำนวนหวานในขนมมีค่ามากกว่า 1 เมื่อเหลือเพียงรายการเดียวเท่านั้น เงื่อนไข sweets.count(sweet) > 1 จะกลายเป็นเท็จ และการวนซ้ำจะข้ามไปยังรายการถัดไป

 for sweet in sweets: # check if the count of sweet is > 1 (repeating item) while(sweets.count(sweet) > 1): # repeatedly remove the first occurrence of sweet until one occurrence remains. sweets.remove(sweet) print(sweets) # Output ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

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

จนถึงตอนนี้ เราได้เรียนรู้สิ่งต่อไปนี้:

  • วิธีการลบรายการที่ซ้ำกันออกจากรายการ Python โดยการสร้างรายการใหม่ที่มีเฉพาะรายการที่ไม่ซ้ำกัน
  • เมธอดรายการในตัว . .count() และ .remove() เพื่อแก้ไขรายการในตำแหน่ง

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

แคสต์รายการ Python ในชุดเพื่อลบรายการที่ซ้ำกัน

ชุด Python คือคอลเล็กชันขององค์ประกอบที่มี ลักษณะเฉพาะทั้งหมด ดังนั้นจำนวนของรายการที่มีอยู่ในชุด (ที่กำหนดโดย len(<set-obj> ) จะเท่ากับจำนวนขององค์ประกอบที่ไม่ซ้ำกันที่มีอยู่

คุณสามารถส่ง Python iterable ใด ๆ ลงในชุดโดยใช้ไวยากรณ์: set(iterable)

ตอนนี้ มาใส่รายการของหวานเป็นชุดแล้วตรวจสอบผลลัพธ์กัน

 set(sweets) # Output {'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}

จากผลลัพธ์ในเซลล์โค้ดด้านบน เราจะเห็นว่าทุกรายการปรากฏเพียงครั้งเดียว และรายการที่ซ้ำกันจะถูกลบออก

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

ตอนนี้เราได้ลบรายการที่ซ้ำกันโดยแคสต์รายการเป็นชุดแล้ว เราสามารถแปลงเป็นรายการได้อีกครั้งดังที่แสดงด้านล่าง

 unique_sweets = list(set(sweets)) print(unique_sweets) # Output ['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']

ใช้รายการเป็นคีย์พจนานุกรมเพื่อลบรายการที่ซ้ำกัน

พจนานุกรม Python คือชุดของคู่คีย์-ค่าที่คีย์ระบุค่าได้โดยไม่ซ้ำกัน

คุณสามารถสร้างพจนานุกรม Python ได้โดยใช้ .fromkeys() ด้วยไวยากรณ์: dict.fromkeys(keys, values) ในที่นี้ keys และ values สามารถทำซ้ำได้ซึ่งมีคีย์และค่าของพจนานุกรมตามลำดับ

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

โดยไม่ต้องระบุค่า dict.fromkeys(sweets) จะส่งกลับพจนานุกรม Python โดยที่ค่าต่างๆ ถูกตั้งค่าเป็น None ซึ่งเป็นค่าเริ่มต้น เซลล์รหัสด้านล่างอธิบายสิ่งนี้

 dict.fromkeys(sweets) # Output {'cake': None, 'candy': None, 'cheesecake': None, 'cupcake': None, 'lollipop': None}

เช่นเดียวกับส่วนก่อนหน้า เราสามารถแปลงพจนานุกรมเป็นรายการได้อีกครั้งดังที่แสดงด้านล่าง

 unique_sweets = list(dict.fromkeys(sweets)) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

จากผลลัพธ์ข้างต้น เราจะเห็นว่ารายการที่ซ้ำกันถูกลบออกจากรายการ sweets .

สรุป

นี่คือบทสรุปของวิธีการต่างๆ ที่คุณสามารถใช้เพื่อลบรายการที่ซ้ำกันหรือการทำซ้ำออกจากรายการ Python

  • ใช้วิธีรายการ Python .append() เพื่อเพิ่มรายการที่ไม่ซ้ำในรายการใหม่ รายการใหม่ประกอบด้วยแต่ละรายการในรายการเดิมเพียงครั้งเดียวและลบการทำซ้ำทั้งหมด คุณยังสามารถทำสิ่งนี้ได้โดยใช้การทำความเข้าใจรายการ
  • ใช้เมธอด . count() และ .remove() ในตัวเพื่อลบรายการที่เกิดขึ้นสองครั้งพอดี สามารถวางแบบเดียวกันในลูป while เพื่อลบเหตุการณ์เพิ่มเติมทั้งหมด
  • แคสต์รายการ Python ลงในชุดเพื่อเก็บเฉพาะองค์ประกอบที่ไม่ซ้ำ
  • ใช้ dict.fromkeys(list) เพื่อลบรายการที่ซ้ำกันออกจากรายการ เนื่องจากไม่ควรมีคีย์ซ้ำของพจนานุกรม

ต่อไป ตรวจสอบโครงการ Python เพื่อฝึกฝนและเรียนรู้ หรือเรียนรู้วิธีค้นหาดัชนีของรายการในรายการ Python มีความสุขในการเรียนรู้!