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