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

โปรแกรม Python นับคู่สำหรับองค์ประกอบต่อเนื่อง


สมมติว่าเรามีสตริงตัวเลขที่มีตัวเลขไม่กี่หลัก ตัวเลขอาจเกิดขึ้นหลายครั้ง เราต้องคืนค่าบางคู่ (หลัก, นับ) แทนตัวเลขที่เกิดขึ้นติดต่อกันกี่ครั้งใน 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)]