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

ตรวจสอบว่าสตริงที่กำหนดสามารถเกิดขึ้นได้โดยการเชื่อมองค์ประกอบสตริงของรายการใน Python


บางครั้งเราต้องตรวจสอบว่าสตริงที่ต้องการสามารถสร้างขึ้นจากสตริงจำนวนมากที่มีอยู่ในรายการได้หรือไม่ นอกจากนี้ยังไม่ควรสนใจว่าสตริงจะอยู่ในลำดับใดในรายการที่ต้องเข้าร่วมเพื่อให้ได้สตริงที่ต้องการ

ด้วยการเรียงสับเปลี่ยน

จาก itertools เราสามารถใช้ฟังก์ชันพีชคณิตซึ่งจะทำให้เราได้ชุดค่าผสมที่เป็นไปได้ของสตริงในรายการในลำดับต่างๆ ทันทีที่ชุดค่าผสมที่กำหนดตรงกับสตริงที่ต้องการ เราก็สรุปได้ว่าสตริงนั้นสามารถสร้างได้

ตัวอย่าง

from itertools import permutations

chk_str = 'balloon'
Alist = ['fly','on', 'o', 'hot', 'ball', 'air']

def findstring(strchk, biglist):
   for i in range(2, len(biglist) + 1):
      for perm in permutations(biglist, i):
         if ''.join(perm) == strchk:
         return True
   return False

# Using the function
if(findstring(chk_str,Alist)):
   print("String can be formed.")
else:
   print("String can not be formed.")

ผลลัพธ์

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

String can be formed.

ด้วยนิพจน์ทั่วไป

โมดูล re มีฟังก์ชันคอมไพล์ซึ่งจะสร้างสตริงที่เป็นไปได้โดยการระบุรูปแบบนิพจน์ทั่วไป จากนั้นจะนำไปเปรียบเทียบกับสตริงที่จะตรวจสอบ หากผลลัพธ์ไม่ใช่ไม่มี เราก็สามารถสรุปได้ว่าสตริงสามารถสร้างขึ้นได้

ตัวอย่าง

import re

chk_str = 'balloon'
Alist = ['fly','on', 'o', 'hot', 'ball', 'air']

def findstring(strchk, biglist):
   r = re.compile("(?:" + "|".join(biglist) + ")*$")
   if r.match(strchk) != None:
      return True
   return False

# Using the function
if(findstring(chk_str,Alist)):
   print("String can be formed.")
else:
   print("String can not be formed.")

ผลลัพธ์

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

String can be formed.