ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่จัดกลุ่มแอนนาแกรมทั้งหมดในรายการ อันดับแรก มาดูกันว่า แอนนาแกรมคืออะไร .
สองสตริงที่มีอักขระเหมือนกันในลำดับที่ต่างกันเรียกว่าแอนนาแกรม
ก่อนดำดิ่งสู่การแก้ปัญหา มาดูตัวอย่างกัน
อินพุต
['cat', 'dog', 'fired', 'god', 'pat', 'tap', 'fried', 'tac']
ผลลัพธ์
[['cat', 'tac'], ['dog', 'god'], ['fried', 'fired'], ['pat', 'tap']]
เราจะแบ่งปัญหาออกเป็นสองส่วน ขั้นแรกเราจะเขียนฟังก์ชันที่ตรวจสอบสองสตริงว่าเป็นแอนนาแกรมหรือไม่ ทำตามขั้นตอนด้านล่างเพื่อเขียนโค้ดเพื่อตรวจสอบแอนนาแกรม
- เริ่มต้นสตริง
- เรียงลำดับทั้งสองสตริง
- หากสตริงที่จัดเรียงทั้งสองมีค่าเท่ากัน ให้คืนค่า True อื่น เท็จ .
ตัวอย่าง
# simple lambda function to check whether two strings are anagrams or not
are_anagrams = lambda x, y: str(sorted(x.lower())) == str(sorted(y.lower()))
# calling the function
print(are_anagrams('cat', 'tac'))
print(are_anagrams('cat', 'Tac'))
print(are_anagrams('cat', 'dog')) ผลลัพธ์
หากคุณเรียกใช้โค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้
True True False
ตอนนี้ เรารู้วิธีตรวจสอบสองสตริงแล้วว่าเป็นแอนนาแกรมหรือไม่ แต่นั่นยังไม่เพียงพอที่จะแก้ปัญหาของเราได้ เราจำเป็นต้องจัดกลุ่ม (จัดเก็บ) แอนนาแกรมทั้งหมดจากรายการเป็นรายการย่อย
เราจะแก้ปัญหาได้อย่างไร
แนวทางปฏิบัติที่ดีที่สุดคือการใช้พจนานุกรมเพื่อจัดกลุ่มองค์ประกอบ เราจะมีคีย์เดียวสำหรับแอนนาแกรมที่เกี่ยวข้อง มันค่อนข้างสับสนถ้าคุณยังใหม่กับ Python เรามาดูขั้นตอนเพื่อให้บรรลุสิ่งที่เราต้องการกันเถอะ
- เริ่มต้นรายการสตริง
- เริ่มต้นพจนานุกรมเปล่า
- ทวนซ้ำในรายการ
- จัดเรียงสตริง
- ตรวจสอบว่ามีอยู่ในพจนานุกรมหรือไม่
-
- หากมีอยู่ในพจนานุกรม ให้ต่อท้ายสตริงในรายการ
- อย่างอื่นเริ่มต้นคีย์ด้วยรายการรวมถึงสตริงปัจจุบันเพื่อเก็บแอนนาแกรม
- พิมพ์ค่าทั้งหมดของพจนานุกรมในรายการ
ตัวอย่าง
# initialzing a list of strings
anagrams = ['cat', 'dog', 'fired', 'god', 'pat', 'tap', 'fried', 'tac']
# initializing an empty dict
grouped_anagrams = {}
# iterating over the list to group all anagrams
for string in anagrams:
# sorting the string
sorted_string = str(sorted(string))
# checking the string in dict
if sorted_string in grouped_anagrams:
# adding the string to the group anagrams
grouped_anagrams[sorted_string].append(string)
else:
# initializing a list with current string
grouped_anagrams[sorted_string] = [string]
# printing the values of the dict (anagram groups)
print(list(grouped_anagrams.values())) ผลลัพธ์
หากคุณเรียกใช้โค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้
[['dog', 'god'], ['pat', 'tap'], ['cat', 'tac'], ['fired', 'fried']]
บทสรุป
คุณสามารถแก้ปัญหาโดยใช้วิธีการต่างๆ ได้เช่นกัน มีโครงสร้างข้อมูลที่เรียกว่า defaultdict ที่ช่วยให้คุณหลีกเลี่ยงการตรวจสอบคีย์ในพจนานุกรม คุณสามารถสำรวจและเปลี่ยนรหัสตามนั้นได้
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น