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

การจัดกลุ่มลิสต์ตามความยาวสตริงใน Python

เมื่อมีลิสต์ที่ประกอบด้วยสตริงความยาวต่างกัน เราอาจต้องการจัดกลุ่มสมาชิกที่มีความยาวเท่ากันไว้ด้วยกัน

วิธีที่ 1: ใช้ for loop และ lambda

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

ตัวอย่าง

listA = ['Monday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
print("Given list:\n", listA)

len_comp = lambda x, y: len(x) == len(y)
res = []

for sub_list in listA:
    ele = next((i for i in res if len_comp(sub_list, i[0])), [])
    if ele == []:
        res.append(ele)
    ele.append(sub_list)

print("The list after creating categories:\n", res)

ผลลัพธ์

Given list: ['Monday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
The list after creating categories: [['Monday', 'Friday', 'Sunday'], ['Thursday', 'Saturday']]

วิธีที่ 2: ใช้ sort และ itertools.groupby (แนะนำ)

เรียงลิสต์ตามความยาวก่อน แล้วใช้ groupby จาก itertools จัดกลุ่มอัตโนมัติ โค้ดสั้นกว่าและอ่านง่ายกว่า

ตัวอย่าง

from itertools import groupby

listA = ['Monday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
print("Given list:\n", listA)

get_len = lambda x: len(x)
sub_list = sorted(listA, key=get_len)
res = [list(ele) for i, ele in groupby(sub_list, get_len)]

print("The list after creating categories:\n", res)

ผลลัพธ์

Given list: ['Monday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
The list after creating categories: [['Monday', 'Friday', 'Sunday'], ['Thursday', 'Saturday']]

วิธีที่ 2 เป็น Pythonic และมีประสิทธิภาพดีกว่า ควรใช้วิธีนี้ในโค้ดจริง