ในวิชาคณิตศาสตร์ การจัดเรียงสมาชิกทั้งหมดของเซตให้อยู่ในลำดับหรือลำดับ และถ้าเซตนั้นได้รับคำสั่งแล้ว การจัดเรียงใหม่ (การจัดลำดับใหม่) องค์ประกอบของเซตจะเรียกว่า การเรียงสับเปลี่ยน เราสามารถสร้างการเรียงสับเปลี่ยนโดยใช้เทคนิคที่แตกต่างกัน ด้านล่างนี้คือบางส่วน
วิธีที่ 1
Python มาพร้อมกับโมดูลเฉพาะสำหรับการเรียงสับเปลี่ยนและการรวมกันที่เรียกว่า itertools
นำเข้าโมดูลก่อน
>>> import itertools >>>
ฟังก์ชันการเรียงสับเปลี่ยนช่วยให้เราได้รับการเปลี่ยนแปลงของค่า N ในรายการ โดยที่ลำดับมีความสำคัญ ตัวอย่างเช่น การเลือก N =2 ค่าด้วย [1,2,3,4] ทำได้ดังนี้ −
Permutation (order matters): >>> print(list(itertools.permutations([1,2,3,4],2))) [(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3)]
การรวมกัน (ลำดับไม่สำคัญ)
>>> print(list(itertools.combinations('1234', 2))) [('1', '2'), ('1', '3'), ('1', '4'), ('2', '3'), ('2', '4'), ('3', '4')]
วิธีที่ 2
ด้านล่างนี้คือการใช้งานบนรายการโดยไม่ต้องสร้างรายการระดับกลางใหม่
def permute(xs, low=0): if low + 1 >= len(xs): yield xs else: for p in permute(xs, low + 1): yield p for i in range(low + 1, len(xs)): xs[low], xs[i] = xs[i], xs[low] for p in permute(xs, low + 1): yield p xs[low], xs[i] = xs[i], xs[low] for p in permute([1, 2, 3]): print (p)
ผลลัพธ์
[1, 2, 3] [1, 3, 2] [2, 1, 3] [2, 3, 1] [3, 2, 1] [3, 1, 2]
วิธีที่ 3 การใช้การเรียกซ้ำ
import copy def perm(prefix,rest): for e in rest: new_rest=copy.copy(rest) new_prefix=copy.copy(prefix) new_prefix.append(e) new_rest.remove(e) if len(new_rest) == 0: print (new_prefix + new_rest) continue perm(new_prefix,new_rest) perm([],[1, 2, 3])
ผลลัพธ์
[1, 2, 3] [1, 3, 2] [2, 1, 3] [2, 3, 1] [3, 1, 2] [3, 2, 1]