สมมติว่าเรามีสตริงตัวเลขที่มีตัวเลขไม่กี่หลัก ตัวเลขอาจเกิดขึ้นหลายครั้ง เราต้องคืนค่าบางคู่ (หลัก, นับ) แทนตัวเลขที่เกิดขึ้นติดต่อกันกี่ครั้งใน s เพื่อแก้ปัญหานี้ เราสามารถใช้ฟังก์ชัน groupby() ที่อยู่ในไลบรารี itertools การดำเนินการนี้จะส่งคืนออบเจ็กต์ iterator หนึ่งออบเจ็กต์ภายในซึ่งแต่ละรายการจะอยู่ในตำแหน่งแรกและอีกอ็อบเจ็กต์ที่จัดกลุ่มตามตำแหน่งที่สอง เราต้องนับจำนวนวัตถุที่จัดกลุ่มสำหรับแต่ละคู่
ดังนั้น หากอินพุตเป็น s ="11522226551" ผลลัพธ์จะเป็น [(1, 2), (5, 1), (2, 4), (6, 1), (5, 2), ( 1, 1)] เพราะในตอนเริ่มต้น 1 มี 2 วินาที จากนั้นมีซิงเกิ้ล 5 ตามด้วย 4 2 วินาทีเป็นต้น
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- it :=เรียกฟังก์ชัน groupby สำหรับ s
- ret :=รายการใหม่
- สำหรับแต่ละคู่ (หลัก, gp) ในนั้น ทำ
- แทรก (ตัวเลขและความยาวของรายการ gp) ลงใน ret
- คืนสินค้า
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น
from itertools import groupby def solve(s): it = groupby(s) ret = [] for digit, gp in it: ret.append((int(digit), len(list(gp)))) return ret s = "11522226551" print(solve(s))
อินพุต
"11522226551"
ผลลัพธ์
[(1, 2), (5, 1), (2, 4), (6, 1), (5, 2), (1, 1)]