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

การจัดกลุ่ม Substring ที่คล้ายกันในลิสต์ Python

โจทย์: ให้ลิสต์สตริงที่มีรูปแบบ "prefix-suffix" จัดกลุ่มตาม prefix (ส่วนหน้าของ -)

Input/Output

Input:  ['tutorials-python', 'tutorials-c', 'tutorials-java', 'tutorials-javascript', 'python-1', 'python-2', 'javascript-1']
Output: [['tutorials-python', 'tutorials-c', 'tutorials-java', 'tutorials-javascript'], ['python-1', 'python-2'], ['javascript-1']]

วิธีแก้: ใช้ itertools.groupby

groupby จัดกลุ่มสมาชิกที่ติดกันและมี key เหมือนกัน ต้อง sort ก่อนหรือข้อมูลอยู่เรียงแล้ว

import itertools

strings = ['tutorials-python', 'tutorials-c', 'tutorials-java', 'tutorials-javascript', 'python-1', 'python-2', 'javascript-1']

result = []
iterator = itertools.groupby(strings, lambda s: s.split('-')[0])

for key, group in iterator:
    result.append(list(group))

print(result)

ผลลัพธ์

[['tutorials-python', 'tutorials-c', 'tutorials-java', 'tutorials-javascript'], ['python-1', 'python-2'], ['javascript-1']]

ข้อสังเกต: groupby จะจัดกลุ่มเฉพาะสมาชิกที่ ติดกัน เท่านั้น หากข้อมูลไม่ได้เรียงตาม prefix ต้อง sorted(strings, key=lambda s: s.split('-')[0]) ก่อน

การประยุกต์: ใช้จัดกลุ่ม Log files, URLs, Categories, Tags ฯลฯ