วิธีการใช้ itertools.groupby()
อย่างมีประสิทธิภาพใน Python
เมื่อทำงานกับชุดข้อมูลใน Python หนึ่งในงานที่คุณจะพบคือความจำเป็นในการ จัดกลุ่มองค์ประกอบ ตามเกณฑ์เฉพาะ สำหรับนักพัฒนาและนักวิทยาศาสตร์ข้อมูล Python มีฟังก์ชันที่ทรงพลังคือ itertools.groupby()
ซึ่งเป็นส่วนหนึ่งของโมดูล itertools
ที่ฝังอยู่ใน Python ฟังก์ชันนี้สามารถช่วยได้มากเมื่อคุณต้องการแบ่งรายการออกเป็นกลุ่มที่แตกต่างกัน
ในบทความนี้เราจะสำรวจวิธีการใช้ itertools.groupby()
อย่างมีประสิทธิภาพ โดยแบ่งเนื้อหาออกเป็นฟังก์ชันและให้ตัวอย่างปฏิบัติที่สามารถนำไปใช้ในสถานการณ์จริงได้
การเข้าใจ itertools.groupby()
ก่อนที่จะไปยังตัวอย่าง มาทำความเข้าใจกันก่อนว่า itertools.groupby()
ทำอะไร ฟังก์ชันนี้จะจัดกลุ่มองค์ประกอบถัดไปใน iterable ที่มีค่าเท่ากันหรือที่ตรงตามเงื่อนไขที่กำหนด นี่คือสิ่งที่คุณควรจำไว้:
-
การจัดเรียงจำเป็น: รายละเอียดสำคัญที่ต้องจำคือ
groupby()
จะจัดกลุ่มเฉพาะรายการที่ติดกันซึ่งมีค่าเท่ากัน นั่นหมายถึงคุณอาจต้อง จัดเรียงชุดข้อมูลของคุณ ก่อนที่จะทำการจัดกลุ่มตามเกณฑ์ของคุณ -
สองอาร์กิวเมนต์: ฟังก์ชัน
groupby()
ใช้สองอาร์กิวเมนต์หลัก:- ข้อมูล: iterable ที่คุณต้องการจัดกลุ่ม
- ฟังก์ชันคีย์: ฟังก์ชันนี้กำหนดเกณฑ์การจัดกลุ่ม
ตัวอย่างของ itertools.groupby()
มาดูตัวอย่างที่ใช้จริงเพื่อแสดงให้เห็นวิธีการใช้ itertools.groupby()
สมมติว่าเรามีรายการของทูเพิลที่แทนรายการต่าง ๆ โดยที่รายการแรกคือหมวดหมู่และรายการที่สองคือชื่อรายการจริง
from itertools import groupby
things = [("animal", "bear"), ("animal", "duck"), ("plant", "cactus"),
("vehicle", "speed boat"), ("vehicle", "school bus")]
for key, group in groupby(things, lambda x: x[0]):
for thing in group:
print("A %s is a %s." % (thing[1], key))
print("")
ผลลัพธ์:
A bear is a animal.
A duck is a animal.
A cactus is a plant.
A speed boat is a vehicle.
A school bus is a vehicle.
คำอธิบายของโค้ด:
- การเตรียมข้อมูล: เราได้สร้างรายการที่เรียกว่า
things
โดยแต่ละองค์ประกอบเป็นทูเพิลที่ประกอบด้วยหมวดหมู่และรายการ - กระบวนการจัดกลุ่ม: ลูป
for
ใช้groupby()
เพื่อทำการวนลูปผ่านทูเพิล โดยจัดกลุ่มตามองค์ประกอบแรก (หมวดหมู่) - ลูปภายใน: ลูปภายในวนซ้ำผ่านแต่ละกลุ่ม แสดงความสัมพันธ์ระหว่างรายการกับหมวดหมู่ของมัน
การใช้งานขั้นสูงของ itertools.groupby()
คุณยังสามารถรวมการทำความเข้าใจด้วยลิสต์คอมพรีเฮนชั่นกับ groupby()
เพื่อให้โค้ดสะอาดยิ่งขึ้น นี่คือวิธีการบรรลุผลลัพธ์เดียวกันโดยใช้ลิสต์คอมพรีเฮนชั่น:
for key, group in groupby(things, lambda x: x[0]):
listOfThings = " and ".join([thing[1] for thing in group])
print(key + "s: " + listOfThings + ".")
ผลลัพธ์:
animals: bear and duck.
plants: cactus.
vehicles: speed boat and school bus.
จุดเด่น:
- ลิสต์คอมพรีเฮนชั่นสร้างสตริงของรายการที่จัดกลุ่มตามหมวดหมู่ของตน
- วิธีนี้ช่วยให้อ่านเข้าใจง่ายและมีประสิทธิภาพในโค้ดของคุณ
สรุป
ฟังก์ชัน itertools.groupby()
เป็นเครื่องมือที่ทรงพลังสำหรับการประมวลผลและจัดกลุ่มข้อมูลใน Python โดยการตรวจสอบให้แน่ใจว่าชุดข้อมูลของคุณถูกจัดเรียงอย่างถูกต้องและใช้ฟังก์ชันการจัดกลุ่มที่ชัดเจน คุณสามารถจัดกลุ่มชุดข้อมูลของคุณได้อย่างมีความหมาย
หวังว่าคู่มือนี้จะช่วยให้คุณเข้าใจวิธีการใช้งาน itertools.groupby()
ในโครงการ Python ของคุณได้มากขึ้น ขอให้สนุกกับการเขียนโค้ด!