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

สร้างการเปลี่ยนแปลงทั้งหมดของชุดใน Python หรือไม่


ในวิชาคณิตศาสตร์ การจัดเรียงสมาชิกทั้งหมดของเซตให้อยู่ในลำดับหรือลำดับ และถ้าเซตนั้นได้รับคำสั่งแล้ว การจัดเรียงใหม่ (การจัดลำดับใหม่) องค์ประกอบของเซตจะเรียกว่า การเรียงสับเปลี่ยน เราสามารถสร้างการเรียงสับเปลี่ยนโดยใช้เทคนิคที่แตกต่างกัน ด้านล่างนี้คือบางส่วน

วิธีที่ 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]