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

⚡ สรุปอย่างชาญฉลาด

การลบรายการที่ซ้ำกันออกจาก Python การสร้างลิสต์สามารถทำได้ด้วยวิธีการต่างๆ ที่มีอยู่แล้ว เช่น set(), dict.fromkeys(), ลูป, list comprehensions และเมธอดจากไลบรารีของ NumPy และ Pandas ซึ่งแต่ละวิธีจะปรับสมดุลระหว่างการรักษาลำดับกับความเร็ว

  • 🔘 วิธีการตั้งค่า: ฟังก์ชัน set() จะส่งคืนองค์ประกอบที่ไม่ซ้ำกันทันที แต่จะไม่รักษาระดับลำดับของรายการเดิมไว้
  • ☑️ ความสงบเรียบร้อยได้รับการรักษาไว้: dict.fromkeys() และ OrderedDict จะลบข้อมูลซ้ำในขณะที่ยังคงรักษาข้อมูลเดิมไว้ping ลำดับการแทรกที่เห็นเป็นครั้งแรก
  • ✅ ควบคุมด้วยมือ: การใช้ลูป for หรือ list comprehension ที่มีการตรวจสอบสมาชิกจะช่วยรักษาความเป็นระเบียบและทำให้อ่านง่าย
  • 🧪 วิธีการใช้งานไลบรารี: เมธอด unique() ของ NumPy และ unique() จะทำการลบข้อมูลซ้ำซ้อนและส่งคืนผลลัพธ์เป็นลิสต์ผ่านเมธอด tolist()
  • 🛠️ ขีดจำกัดความสามารถในการสร้างแฮช: คีย์ของเซ็ตและพจนานุกรมต้องการรายการที่สามารถแฮชได้ ดังนั้นลิสต์หรือพจนานุกรมจึงต้องใช้วิธีการแบบวนลูป
  • 🤖 เวิร์กโฟลว์ AI: กระบวนการเรียนรู้ของเครื่องจะกำจัดข้อมูลซ้ำซ้อนในข้อมูลฝึกฝนโดยใช้ฟังก์ชัน `drop_duplicates()` ของ Pandas เพื่อป้องกันอคติและการรั่วไหลของข้อมูล

ลบรายการซ้ำออกจากรายการใน Python

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

รายการคือคอนเทนเนอร์ที่ประกอบด้วยข้อมูลที่แตกต่างกัน Python วัตถุ ซึ่งอาจเป็นจำนวนเต็ม คำ ค่า ฯลฯ ซึ่งเทียบเท่ากับอาร์เรย์ในภาษาการเขียนโปรแกรมอื่นๆ

ดังนั้นในที่นี้เราจะมาดูวิธีการต่างๆ ในการลบรายการซ้ำออกจากรายการที่กำหนด Python.

วิธีที่ 1) ลบรายการที่ซ้ำกันออกจากรายการโดยใช้ Set

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

เรามีลิสต์ [1,1,2,3,2,2,4,5,6,2,1] ลิสต์นี้มีค่าซ้ำกันหลายค่า ซึ่งเราจำเป็นต้องลบออกและดึงกลับมาเฉพาะค่าที่ไม่ซ้ำกันเท่านั้น เราป้อนลิสต์นี้ให้กับฟังก์ชัน set() ที่มีอยู่แล้ว Later รายการสุดท้ายจะแสดงผลโดยใช้ฟังก์ชันในตัว list()

ผลลัพธ์ที่ได้คือองค์ประกอบที่ไม่ซ้ำกัน โดยที่องค์ประกอบที่ซ้ำกันทั้งหมดถูกกำจัดออกไปแล้ว

ตัวอย่าง

my_list = [1,1,2,3,2,2,4,5,6,2,1]
my_final_list = set(my_list)
print(list(my_final_list))

Output:

[1, 2, 3, 4, 5, 6]

วิธีที่ 2) การใช้รายการชั่วคราว

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

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่างการใช้งานโดยใช้รายการชั่วคราว

my_list = [1, 2, 3, 1, 2, 4, 5, 4 ,6, 2]
print("List Before ", my_list)
temp_list = []

for i in my_list:
    if i not in temp_list:
        temp_list.append(i)

my_list = temp_list

print("List After removing duplicates ", my_list)

Output:

List Before  [1, 2, 3, 1, 2, 4, 5, 4, 6, 2]
List After removing duplicates  [1, 2, 3, 4, 5, 6]

วิธีที่ 3) การใช้ Dict

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

เราจะใช้ลิสต์และเมธอด fromkeys() ที่มีอยู่ใน OrderedDict เพื่อดึงองค์ประกอบที่ไม่ซ้ำกันจากลิสต์นั้น

เพื่อให้สามารถใช้งานเมธอด OrderedDict.fromkeys() ได้ คุณต้องนำเข้า OrderedDict จาก collections ก่อน ดังที่แสดงด้านล่าง:

from collections import OrderedDict

ต่อไปนี้เป็นตัวอย่างการลบข้อมูลซ้ำโดยใช้วิธี OrderedDict.fromkeys()

ตัวอย่าง

from collections import OrderedDict

my_list = ['a','x','a','y','a','b','b','c']

my_final_list = OrderedDict.fromkeys(my_list)

print(list(my_final_list))

Output:

['a', 'x', 'y', 'b', 'c']

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

ตัวอย่างที่แสดงวิธีใช้งาน dict.fromkeys() กับลิสต์เพื่อให้ได้รายการที่ไม่ซ้ำกัน มีดังนี้:

ตัวอย่าง

my_list = ['a','x','a','y','a','b','b','c']
my_final_list = dict.fromkeys(my_list)
print(list(my_final_list))

Output:

['a', 'x', 'y', 'b', 'c']

วิธีที่ 4) การใช้ for-loop

การใช้ สำหรับห่วงเราจะสำรวจรายการเพื่อลบรายการที่ซ้ำกัน

ขั้นแรก ให้กำหนดค่าเริ่มต้นให้กับอาร์เรย์เป็นค่าว่าง เช่น myFinallist = [] ภายในลูป for ให้ตรวจสอบว่ารายการในลิสต์นั้นมีอยู่ในอาร์เรย์ myFinallist หรือไม่ ถ้าไม่มีรายการนั้น ให้เพิ่มรายการนั้นลงในอาร์เรย์ myFinallist โดยใช้เมธอด append()

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

ตัวอย่าง

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinallist = []
for i in my_list:
    if i not in myFinallist:
myFinallist.append(i)
print(list(myFinallist))

Output:

[1, 2, 3, 4, 5, 6]

วิธีที่ 5) การใช้รายการความเข้าใจ

รายการความเข้าใจคือ Python ฟังก์ชันที่ใช้สำหรับสร้างลำดับใหม่ (เช่น รายการ พจนานุกรม ฯลฯ) โดยใช้ลำดับที่สร้างขึ้นแล้ว สิ่งนี้ช่วยให้คุณลดการวนซ้ำที่ยาวขึ้นและทำให้โค้ดของคุณอ่านและบำรุงรักษาได้ง่ายขึ้น

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

ตัวอย่าง

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = []
[my_finallist.append(n) for n in my_list if n not in my_finallist]
print(my_finallist)

Output:

[1, 2, 3, 4, 5, 6]

วิธีที่ 6) การใช้เมธอด unique() ของ NumPy

เมธอด unique() จากโมดูล NumPy สามารถช่วยเราลบรายการที่ซ้ำกันออกจากลิสต์ที่กำหนดได้

ในการใช้งาน NumPy ขั้นแรกให้ทำการอิมพอร์ตโมดูล numpy ก่อน:

ขั้นตอน 1) นำเข้าโมดูล NumPy

import numpy as np

ขั้นตอน 2) ใช้ลิสต์ที่มีข้อมูลซ้ำกันภายในเมธอด unique() จากนั้นใช้เมธอด tolist() แปลงผลลัพธ์กลับเป็นลิสต์อีกครั้ง

myFinalList = np.unique(my_list).tolist()

ขั้นตอน 3) สุดท้าย พิมพ์รายการออกมา:

print(myFinalList)

รหัสสุดท้ายพร้อมเอาต์พุตจะเป็นดังนี้:

import numpy as np
my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = np.unique(my_list).tolist()
print(myFinalList)

Output:

[1, 2, 3, 4, 5, 6]

วิธีที่ 7) การใช้วิธี Pandas

โมดูล Pandas มีเมธอดเฉพาะ () ที่จะให้องค์ประกอบเฉพาะจากรายการที่กำหนดแก่เรา

วิธีใช้งานโมดูล Pandas:

ขั้นตอน 1) นำเข้าโมดูล Pandas

import pandas as pd

ขั้นตอน 2) ใช้ลิสต์ที่มีข้อมูลซ้ำกันภายในเมธอด unique() :

myFinalList = pd.unique(my_list).tolist()

ขั้นตอน 3) พิมพ์รายการ:

print(myFinalList)

รหัสสุดท้ายพร้อมเอาต์พุตจะเป็นดังนี้:

import pandas as pd

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = pd.unique(my_list).tolist()
print(myFinalList)

Output:

[1, 2, 3, 4, 5, 6]

วิธีที่ 8) การใช้ enumerate() และรายการความเข้าใจ

ในที่นี้เราใช้การผสมผสานระหว่าง list comprehension และ enumerate() เพื่อลบองค์ประกอบที่ซ้ำกัน enumerate จะส่งคืนอ็อบเจ็กต์ที่มีตัวนับสำหรับแต่ละองค์ประกอบในรายการ ตัวอย่างเช่น (0,1), (1,2) เป็นต้น โดยค่าแรกคือดัชนี และค่าที่สองคือรายการในลิสต์

แต่ละองค์ประกอบจะถูกตรวจสอบว่ามีอยู่ในรายการหรือไม่ และหากมีอยู่ก็จะถูกลบออกจากรายการ

ตัวอย่าง

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = [i for j, i in enumerate(my_list) if i not in my_list[:j]]
print(list(my_finallist))

Output:

[1, 2, 3, 4, 5, 6]

คำถามที่พบบ่อย

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

สำหรับลิสต์ขนาดใหญ่ set() จะเร็วที่สุดเมื่อลำดับไม่สำคัญ เพราะการตรวจสอบสมาชิกใช้เวลา O(1) เมื่อลำดับสำคัญ list(dict.fromkeys(my_list)) จะเร็วเกือบเท่ากันและรักษาลำดับที่เห็นครั้งแรกไว้ในบรรทัดเดียว

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

ใช้ list(dict.fromkeys(my_list)) เนื่องจาก Python 3.7 พจนานุกรมจะรักษาลำดับการแทรก ดังนั้นคีย์จึงเรียงตามลำดับที่เห็นครั้งแรก ในเวอร์ชันก่อนหน้า ให้ใช้ collections.OrderedDict.fromkeys() เพื่อให้ได้ผลลัพธ์เดียวกัน

ไม่ วิธีการต่างๆ เช่น set(), dict.fromkeys(), comprehensions และ unique() ของ NumPy หรือ Pandas จะสร้างลิสต์ใหม่โดยไม่เปลี่ยนแปลงลิสต์ต้นฉบับ หากต้องการเขียนทับลิสต์เดิม ให้กำหนดค่าผลลัพธ์กลับเข้าไปในตัวแปรเดิม

ใช้ numpy.unique() หรือ pandas.unique() เมื่อข้อมูลอยู่ในรูปแบบอาร์เรย์หรือ Series อยู่แล้ว หรือระหว่างการวิเคราะห์ข้อมูล โปรดทราบว่า numpy.unique() จะเรียงลำดับค่าต่างๆ ด้วย ในขณะที่ pandas.unique() จะคงลำดับที่เห็นครั้งแรกไว้ หากต้องการสร้างลิสต์ธรรมดา ให้เรียกใช้ tolist()

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

ใช่แล้ว GitHub Copilot และผู้ช่วย AI ของ Agentic สามารถสร้างโค้ด set(), dict.fromkeys() หรือโค้ด Pandas สำหรับการลบข้อมูลซ้ำซ้อนจากความคิดเห็น แนะนำตัวเลือกที่รักษาลำดับ และปรับโครงสร้างลูปใหม่ได้ แต่คุณควรตรวจสอบกรณีพิเศษ เช่น รายการที่ไม่สามารถแฮชได้

สรุปโพสต์นี้ด้วย: