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

โปรแกรมนับคู่ของสมาชิกที่ติดกันในสตริงตัวเลขใน Python

สมมติว่าเรามีสตริงตัวเลข s ที่มีหลายหลัก หลักอาจซ้ำกันได้ เราต้องคืนค่าคู่บางคู่ (digit, count) แทนว่าตัวเลขไหนเกิดขึ้นติดกันกี่ครั้งใน s ในการแก้ปัญหานี้ เราสามารถใช้ฟังก์ชัน groupby() จากไลบรารี itertools ฟังก์ชันนี้จะคืนค่า iterator ที่แต่ละรายการมีค่าตัวอักษรอยู่ตำแหน่งแรก และอ็อบเจ็กต์ groupby อยู่ตำแหน่งที่สอง เราต้องนับจำนวน groupby objects สำหรับแต่ละคู่

ตัวอย่างเช่น หาก s = "11522226551" ผลลัพธ์จะเป็น [(1, 2), (5, 1), (2, 4), (6, 1), (5, 2), (1, 1)] เพราะต้นทาง 1 อยู่ 2 ตัว แล้ว 5 เดียว แล้ว 2 สี่ตัว ต่อไป...

ขั้นตอนการแก้ปัญหา

  • it := เรียกฟังก์ชัน groupby สำหรับ s
  • ret := รายการใหม่
  • สำหรับแต่ละคู่ (digit, gp) ใน it:
    • เพิ่ม (digit และความยาวของ list(gp)) เข้าไปใน ret
  • คืนค่า 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)]