ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่จัดกลุ่มแอนนาแกรมทั้งหมดในรายการ อันดับแรก มาดูกันว่า แอนนาแกรมคืออะไร .
สองสตริงที่มีอักขระเหมือนกันในลำดับที่ต่างกันเรียกว่าแอนนาแกรม
ก่อนดำดิ่งสู่การแก้ปัญหา มาดูตัวอย่างกัน
อินพุต
['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 ที่ช่วยให้คุณหลีกเลี่ยงการตรวจสอบคีย์ในพจนานุกรม คุณสามารถสำรวจและเปลี่ยนรหัสตามนั้นได้
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น