บางครั้งเราต้องตรวจสอบว่าสตริงที่ต้องการสามารถสร้างขึ้นจากสตริงจำนวนมากที่มีอยู่ในรายการได้หรือไม่ นอกจากนี้ยังไม่ควรสนใจว่าสตริงจะอยู่ในลำดับใดในรายการที่ต้องเข้าร่วมเพื่อให้ได้สตริงที่ต้องการ
ด้วยการเรียงสับเปลี่ยน
จาก 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.