Computer >> Máy Tính >  >> Lập trình >> Python

Nhóm danh sách phần tử nhị phân trong Python

Giả sử chúng ta có một danh sách các danh sách trong đó mỗi danh sách con có hai phần tử. Một phần tử của mỗi danh sách con là phổ biến trên nhiều chủ đề khác của danh sách. Chúng tôi cần tạo một danh sách cuối cùng sẽ hiển thị các danh sách con được nhóm theo các yếu tố chung.

Với set và map

Trong danh sách đã cho, phần tử đầu tiên là một chuỗi và phần tử thứ hai là một số. Vì vậy, chúng tôi tạo một danh sách tạm thời sẽ chứa phần tử thứ hai của mỗi danh sách con. Sau đó, chúng tôi so sánh là danh sách con với từng phần tử trong danh sách tạm thời và nhà thiết kế làm theo để nhóm chúng.

Ví dụ

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)

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

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

Với groupby và itemgetter

Hàm itemgetter được sử dụng để lấy phần tử thứ hai của mỗi danh sách con. Sau đó, một nhóm theo chức năng được áp dụng dựa trên kết quả từ hàm mục tiêu.

Ví dụ

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)

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

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

Với sắc lệnh mặc định

Chúng tôi Áp dụng hàm defaultdict để lấy các phần tử thứ hai của danh sách con làm khóa của từ điển. Sau đó, trong danh sách kết quả, chúng tôi nối các giá trị từ phần tử đầu tiên của danh sách con.

Ví dụ

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)

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

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