Giả sử chúng ta có một chuỗi số s chứa vài chữ số. Các chữ số có thể xuất hiện nhiều lần. Chúng ta phải trả về một số cặp (chữ số, số đếm) biểu thị chữ số nào đã xuất hiện liên tiếp bao nhiêu lần trong s. Để giải quyết vấn đề này, chúng ta có thể sử dụng hàm groupby () có trong thư viện itertools. Thao tác này sẽ trả về một đối tượng vòng lặp bên trong mà mỗi mục sẽ ở vị trí đầu tiên và một đối tượng khác được nhóm theo nhóm ở vị trí thứ hai. Chúng ta phải đếm số lượng đối tượng theo nhóm cho mỗi cặp.
Vì vậy, nếu đầu vào là s ="11522226551", thì đầu ra sẽ là [(1, 2), (5, 1), (2, 4), (6, 1), (5, 2), ( 1, 1)] bởi vì ở đầu 1 có hai lần, sau đó là đơn 5 rồi đến 4 2, v.v.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- it:=gọi hàm theo nhóm cho s
- ret:=một danh sách mới
- đối với mỗi cặp (chữ số, gp) trong đó, thực hiện
- chèn (chữ số và độ dài của danh sách gp) vào ret
- trả lời lại
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn
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))
Đầu vào
"11522226551"
Đầu ra
[(1, 2), (5, 1), (2, 4), (6, 1), (5, 2), (1, 1)]