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

จะค้นหาพีชคณิตที่เป็นไปได้ทั้งหมดของสตริงที่กำหนดใน Python ได้อย่างไร


หากต้องการค้นหาการเรียงสับเปลี่ยนที่เป็นไปได้ทั้งหมดของสตริงที่กำหนด คุณสามารถใช้โมดูล itertools ซึ่งมีวิธีการที่มีประโยชน์ที่เรียกว่าพีชคณิต (iterable[, r]) เมธอดนี้ส่งคืนการเปลี่ยนลำดับความยาว r ต่อเนื่องขององค์ประกอบใน iterable เป็น tuples

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

 >>>from itertools import permutations
>>>print [''.join(p) for p in permutations('dune')]
['dune','duen', 'dnue', 'dneu', 'deun', 'denu', 'udne', 'uden', 'unde', 'uned', 'uedn','uend', 'ndue', 'ndeu', 'nude',
 'nued', 'nedu', 'neud', 'edun', 'ednu','eudn', 'eund', 'endu', 'enud']

หากคุณไม่ต้องการใช้วิธีการที่สร้างขึ้น แต่สร้างวิธีการแบบเรียกซ้ำ คุณสามารถใช้วิธีแก้ปัญหาแบบเรียกซ้ำต่อไปนี้:

 def permutations(string, step = 0):
    if step == len(string):
        # we've gotten to the end, print the permutation
        print "".join(string)
     for i in range(step, len(string)):
        # copy the string (store as array)
        string_copy = [c for c in string]
         # swap the current index with the step
        string_copy[step], string_copy[i] =string_copy[i], string_copy[step]
         # recurse on the portion of the stringthat has not been swapped yet
        permutations(string_copy, step + 1)
print (permutations ('one'))

ผลลัพธ์

one
oen
noe
neo
eno
eon
None