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

หาสตริงที่ตัวอักษรห่างกันเท่ากัน (Equidistant Consecutive Characters)

แนวคิด

สตริงที่ "ตัวอักษรห่างกันเท่ากัน" หมายถึง ความต่างของ Unicode code point ระหว่างตัวอักษรติดกันคงที่ ตลอดสตริง เช่น 'abc' (diff=1), 'mpsv' (diff=3), 'agms' (diff=6)

ตัวอย่างโค้ด

my_list = ["abc", "egfg", "mpsv", "abed", 'xzbd', 'agms']
print("ลิสต์:", my_list)

my_result = [
    sub for sub in my_list 
    if all(ord(sub[i+1]) - ord(sub[i]) == ord(sub[1]) - ord(sub[0]) 
           for i in range(len(sub) - 1))
]

print("สตริง equidistant:", my_result)

ผลลัพธ์

ลิสต์: ['abc', 'egfg', 'mpsv', 'abed', 'xzbd', 'agms']
สตริง equidistant: ['abc', 'mpsv', 'agms']

คำอธิบาย

  • ord(c) คืนค่า Unicode code point ของตัวอักษร
  • คำนวณ diff ของคู่แรก: ord(sub[1]) - ord(sub[0])
  • all(...) ตรวจสอบว่าคู่อื่นๆ มี diff เท่ากันหมด
  • 'egfg': e->g=2, g->f=-1, f->g=1 -> ไม่เท่ากัน
  • 'abed': a->b=1, b->e=3, e->d=-1 -> ไม่เท่ากัน

กรณีสตริงความยาว 1

สตริงความยาว 1 จะถือว่า equidistant โดยค่าเริ่มต้น (vacuously true) หากต้องการตัดออก ให้เพิ่ม len(sub) > 1 ในเงื่อนไข