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

การจัดกลุ่มรายการองค์ประกอบไบนารีใน Python


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

พร้อมฉากและแผนที่

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

ตัวอย่าง

listA = [['Mon', 2], ['Tue', 3], ['Wed', 3],
["Thu", 1], ['Fri', 2], ['Sat', 3],
['Sun', 1]]
# With set and map
temp = set(map(lambda i: i[1], listA))
res = [[j[0] for j in listA if j[1] == i] for i in temp]
# Result
print("The list with grouped elements is : \n" ,res)

ผลลัพธ์

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

The list with grouped elements is :
[['Thu', 'Sun'], ['Mon', 'Fri'], ['Tue', 'Wed', 'Sat']]

ด้วย groupby และ itemgetter

ฟังก์ชัน itemgetter ใช้เพื่อรับองค์ประกอบที่สองของแต่ละรายการย่อย จากนั้นระบบจะใช้กลุ่มตามฟังก์ชันตามผลลัพธ์จากฟังก์ชัน itemgetter

ตัวอย่าง

from itertools import groupby
from operator import itemgetter
listA = [['Mon', 2], ['Tue', 3], ['Wed', 3],["Thu", 1], ['Fri', 2], ['Sat', 3],['Sun', 1]]
# With groupby
listA.sort(key = itemgetter(1))
groups = groupby(listA, itemgetter(1))
res = [[i[0] for i in val] for (key, val) in groups]
# Result
print("The list with grouped elements is : \n" ,res)

ผลลัพธ์

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

The list with grouped elements is :
[['Thu', 'Sun'], ['Mon', 'Fri'], ['Tue', 'Wed', 'Sat']]

ด้วย defaultdict

เราใช้ฟังก์ชัน defaultdict เพื่อรับองค์ประกอบที่สองของรายการย่อยเป็นคีย์ของพจนานุกรม จากนั้นในรายการผลลัพธ์ เราผนวกค่าจากองค์ประกอบแรกของรายการย่อย

ตัวอย่าง

import collections
listA = [['Mon', 2], ['Tue', 3], ['Wed', 3],["Thu", 1], ['Fri', 2], ['Sat', 3],['Sun', 1]]
# With defaultdict
res = collections.defaultdict(list)
for val in listA:
   res[val[1]].append(val[0])
# Result
print("The list with grouped elements is : \n" ,res)

ผลลัพธ์

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

The list with grouped elements is :
defaultdict(<class 'list'>, {2: ['Mon', 'Fri'], 3: ['Tue', 'Wed', 'Sat'], 1: ['Thu', 'Sun']})