Hướng dẫn python permutations of a string without itertools - hoán vị python của một chuỗi không có itertools

Nếu bạn sợ hết bộ nhớ sử dụng bộ nhớ. Tiếp tục gọi d.next [] cho các giá trị của bạn. Nó chỉ hiệu quả cho các vòng lồng nhỏ.

>>> s = 'abc'
>>> d =[ [x,y,z] for x in s for y in s for z in s]
>>> d.next[]
'aaa'
>>> d.next[]
'aab'

Nếu bạn muốn tất cả các giá trị chỉ cần làm

list[d]

Để sử dụng độ dài tùy ý: Điều này tạo ra nhiều nhóm như các yếu tố trong chuỗi và sau đó lặp lại trên tất cả chúng và tiếp tục thêm vào kết quả cuối cùng. Đây là cách itertools.product được triển khai trong Python. Để biết thêm chi tiết, hãy truy cập tại đây

def product[x]:
        final = [[]]
        l = len[x]
        groups = [list[x]] * l
        for i in groups:
            final = [x+[y] for x in final for y in i]
        for k in final:
            yield ''.join[k]

Buộc tất cả các kết quả:

list[product['abc']]

['aaa',
 'aab',
 'aac',
 'aba',
 'abb',
 'abc',
 'aca',
 'acb',
 'acc',
 'baa',
 'bab',
 'bac',
 'bba',
 'bbb',
 'bbc',
 'bca',
 'bcb',
 'bcc',
 'caa',
 'cab',
 'cac',
 'cba',
 'cbb',
 'cbc',
 'cca',
 'ccb',
 'ccc']

Hoán vị là một sự sắp xếp của các đối tượng theo một thứ tự cụ thể. Thứ tự sắp xếp đối tượng là rất quan trọng. Số lượng hoán vị trên một bộ các phần tử & nbsp; n & nbsp; được đưa ra bởi & nbsp; N!. & nbsp; ví dụ, có & nbsp; 2! = 2*1 = 2 & nbsp; hoán vị của & nbsp; {1, 2}, cụ thể là & nbsp; {1, 2} & nbsp; và & nbsp; = 3*2*1 = 6 & nbsp; hoán vị của & nbsp; {1, 2, 3}, cụ thể là & nbsp; {1, 2, 3}, & nbsp; {1, 3, 2}, & nbsp; & nbsp; {2, 3, 1}, & nbsp; {3, 1, 2} và & nbsp; {3, 2, 1}. & nbsp;
 

Phương pháp 1 [quay lại] & nbsp; chúng ta có thể sử dụng giải pháp đệ quy dựa trên backtracking được thảo luận ở đây.
We can use the backtracking based recursive solution discussed here.
Method 2 
The idea is to one by one extract all elements, place them at first position and recur for remaining list.
 

Python3

def permutation[lst]:

____10

list[d]
1
list[d]
2
list[d]
3
list[d]
4
list[d]
4
list[d]
6
list[d]
7

list[d]
8
list[d]
9
def product[x]:
        final = [[]]
        l = len[x]
        groups = [list[x]] * l
        for i in groups:
            final = [x+[y] for x in final for y in i]
        for k in final:
            yield ''.join[k]
0

Các

list[d]
8
list[d]
9
list[product['abc']]

['aaa',
 'aab',
 'aac',
 'aba',
 'abb',
 'abc',
 'aca',
 'acb',
 'acc',
 'baa',
 'bab',
 'bac',
 'bba',
 'bbb',
 'bbc',
 'bca',
 'bcb',
 'bcc',
 'caa',
 'cab',
 'cac',
 'cba',
 'cbb',
 'cbc',
 'cca',
 'ccb',
 'ccc']
1

list[d]
0
list[product['abc']]

['aaa',
 'aab',
 'aac',
 'aba',
 'abb',
 'abc',
 'aca',
 'acb',
 'acc',
 'baa',
 'bab',
 'bac',
 'bba',
 'bbb',
 'bbc',
 'bca',
 'bcb',
 'bcc',
 'caa',
 'cab',
 'cac',
 'cba',
 'cbb',
 'cbc',
 'cca',
 'ccb',
 'ccc']
3
list[d]
4
list[product['abc']]

['aaa',
 'aab',
 'aac',
 'aba',
 'abb',
 'abc',
 'aca',
 'acb',
 'acc',
 'baa',
 'bab',
 'bac',
 'bba',
 'bbb',
 'bbc',
 'bca',
 'bcb',
 'bcc',
 'caa',
 'cab',
 'cac',
 'cba',
 'cbb',
 'cbc',
 'cca',
 'ccb',
 'ccc']
5

____10

list[product['abc']]

['aaa',
 'aab',
 'aac',
 'aba',
 'abb',
 'abc',
 'aca',
 'acb',
 'acc',
 'baa',
 'bab',
 'bac',
 'bba',
 'bbb',
 'bbc',
 'bca',
 'bcb',
 'bcc',
 'caa',
 'cab',
 'cac',
 'cba',
 'cbb',
 'cbc',
 'cca',
 'ccb',
 'ccc']
7
list[product['abc']]

['aaa',
 'aab',
 'aac',
 'aba',
 'abb',
 'abc',
 'aca',
 'acb',
 'acc',
 'baa',
 'bab',
 'bac',
 'bba',
 'bbb',
 'bbc',
 'bca',
 'bcb',
 'bcc',
 'caa',
 'cab',
 'cac',
 'cba',
 'cbb',
 'cbc',
 'cca',
 'ccb',
 'ccc']
8
list[product['abc']]

['aaa',
 'aab',
 'aac',
 'aba',
 'abb',
 'abc',
 'aca',
 'acb',
 'acc',
 'baa',
 'bab',
 'bac',
 'bba',
 'bbb',
 'bbc',
 'bca',
 'bcb',
 'bcc',
 'caa',
 'cab',
 'cac',
 'cba',
 'cbb',
 'cbc',
 'cca',
 'ccb',
 'ccc']
9
['1', '2', '3']
['1', '3', '2']
['2', '1', '3']
['2', '3', '1']
['3', '1', '2']
['3', '2', '1']
0
['1', '2', '3']
['1', '3', '2']
['2', '1', '3']
['2', '3', '1']
['3', '1', '2']
['3', '2', '1']
1
list[d]
2
['1', '2', '3']
['1', '3', '2']
['2', '1', '3']
['2', '3', '1']
['3', '1', '2']
['3', '2', '1']
3

['1', '2', '3']
['1', '3', '2']
['2', '1', '3']
['2', '3', '1']
['3', '1', '2']
['3', '2', '1']
4
['1', '2', '3']
['1', '3', '2']
['2', '1', '3']
['2', '3', '1']
['3', '1', '2']
['3', '2', '1']
5
list[d]
4
['1', '2', '3']
['1', '3', '2']
['2', '1', '3']
['2', '3', '1']
['3', '1', '2']
['3', '2', '1']
7

['1', '2', '3']
['1', '3', '2']
['2', '1', '3']
['2', '3', '1']
['3', '1', '2']
['3', '2', '1']
4___

['1', '2', '3']
['1', '3', '2']
['2', '1', '3']
['2', '3', '1']
['3', '1', '2']
['3', '2', '1']
4
list[product['abc']]

['aaa',
 'aab',
 'aac',
 'aba',
 'abb',
 'abc',
 'aca',
 'acb',
 'acc',
 'baa',
 'bab',
 'bac',
 'bba',
 'bbb',
 'bbc',
 'bca',
 'bcb',
 'bcc',
 'caa',
 'cab',
 'cac',
 'cba',
 'cbb',
 'cbc',
 'cca',
 'ccb',
 'ccc']
7
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]] 
9
list[product['abc']]

['aaa',
 'aab',
 'aac',
 'aba',
 'abb',
 'abc',
 'aca',
 'acb',
 'acc',
 'baa',
 'bab',
 'bac',
 'bba',
 'bbb',
 'bbc',
 'bca',
 'bcb',
 'bcc',
 'caa',
 'cab',
 'cac',
 'cba',
 'cbb',
 'cbc',
 'cca',
 'ccb',
 'ccc']
9
out=[]

def permute[msg, i, length]:
    if i==length:
        out.append["".join[msg]]
    else:
        for j in range[i, length]:
            msg[i], msg[j] = msg[j], msg[i]
            permute[msg, i+1, length]
            msg[j], msg[i] = msg[i], msg[j]

msg="abc"
permute[list[msg], 0, len[msg]]
print[out]
1

out=[]

def permute[msg, i, length]:
    if i==length:
        out.append["".join[msg]]
    else:
        for j in range[i, length]:
            msg[i], msg[j] = msg[j], msg[i]
            permute[msg, i+1, length]
            msg[j], msg[i] = msg[i], msg[j]

msg="abc"
permute[list[msg], 0, len[msg]]
print[out]
2
out=[]

def permute[msg, i, length]:
    if i==length:
        out.append["".join[msg]]
    else:
        for j in range[i, length]:
            msg[i], msg[j] = msg[j], msg[i]
            permute[msg, i+1, length]
            msg[j], msg[i] = msg[i], msg[j]

msg="abc"
permute[list[msg], 0, len[msg]]
print[out]
3
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]] 
2
out=[]

def permute[msg, i, length]:
    if i==length:
        out.append["".join[msg]]
    else:
        for j in range[i, length]:
            msg[i], msg[j] = msg[j], msg[i]
            permute[msg, i+1, length]
            msg[j], msg[i] = msg[i], msg[j]

msg="abc"
permute[list[msg], 0, len[msg]]
print[out]
5

list[d]
0
list[d]
9
out=[]

def permute[msg, i, length]:
    if i==length:
        out.append["".join[msg]]
    else:
        for j in range[i, length]:
            msg[i], msg[j] = msg[j], msg[i]
            permute[msg, i+1, length]
            msg[j], msg[i] = msg[i], msg[j]

msg="abc"
permute[list[msg], 0, len[msg]]
print[out]
8

out=[]

def permute[msg, i, length]:
    if i==length:
        out.append["".join[msg]]
    else:
        for j in range[i, length]:
            msg[i], msg[j] = msg[j], msg[i]
            permute[msg, i+1, length]
            msg[j], msg[i] = msg[i], msg[j]

msg="abc"
permute[list[msg], 0, len[msg]]
print[out]
9
list[d]
4
['abc', 'acb', 'bac', 'bca', 'cba', 'cab']
1
['1', '2', '3']
['1', '3', '2']
['2', '1', '3']
['2', '3', '1']
['3', '1', '2']
['3', '2', '1']
1
['abc', 'acb', 'bac', 'bca', 'cba', 'cab']
3
['abc', 'acb', 'bac', 'bca', 'cba', 'cab']
4

list[product['abc']]

['aaa',
 'aab',
 'aac',
 'aba',
 'abb',
 'abc',
 'aca',
 'acb',
 'acc',
 'baa',
 'bab',
 'bac',
 'bba',
 'bbb',
 'bbc',
 'bca',
 'bcb',
 'bcc',
 'caa',
 'cab',
 'cac',
 'cba',
 'cbb',
 'cbc',
 'cca',
 'ccb',
 'ccc']
7
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]] 
9
list[product['abc']]

['aaa',
 'aab',
 'aac',
 'aba',
 'abb',
 'abc',
 'aca',
 'acb',
 'acc',
 'baa',
 'bab',
 'bac',
 'bba',
 'bbb',
 'bbc',
 'bca',
 'bcb',
 'bcc',
 'caa',
 'cab',
 'cac',
 'cba',
 'cbb',
 'cbc',
 'cca',
 'ccb',
 'ccc']
9
['abc', 'acb', 'bac', 'bca', 'cba', 'cab']
8

list[d]
0def0 def1

Output:

['1', '2', '3']
['1', '3', '2']
['2', '1', '3']
['2', '3', '1']
['3', '1', '2']
['3', '2', '1']

Phương pháp 3 [hàm trực tiếp] & nbsp; chúng ta có thể làm điều đó bằng cách sử dụng chức năng hoán vị tích hợp trong thư viện ITERTOOLS. Đó là kỹ thuật ngắn nhất để tìm thấy hoán vị. & NBSP;
We can do it by simply using the built-in permutation function in itertools library. It is the shortest technique to find the permutation.
 

Python3

def2 def3def4 def5

list[product['abc']]

['aaa',
 'aab',
 'aac',
 'aba',
 'abb',
 'abc',
 'aca',
 'acb',
 'acc',
 'baa',
 'bab',
 'bac',
 'bba',
 'bbb',
 'bbc',
 'bca',
 'bcb',
 'bcc',
 'caa',
 'cab',
 'cac',
 'cba',
 'cbb',
 'cbc',
 'cca',
 'ccb',
 'ccc']
3
list[d]
4
['abc', 'acb', 'bac', 'bca', 'cba', 'cab']
1def9
['1', '2', '3']
['1', '3', '2']
['2', '1', '3']
['2', '3', '1']
['3', '1', '2']
['3', '2', '1']
0
['1', '2', '3']
['1', '3', '2']
['2', '1', '3']
['2', '3', '1']
['3', '1', '2']
['3', '2', '1']
1
def product[x]:
        final = [[]]
        l = len[x]
        groups = [list[x]] * l
        for i in groups:
            final = [x+[y] for x in final for y in i]
        for k in final:
            yield ''.join[k]
7
list[product['abc']]

['aaa',
 'aab',
 'aac',
 'aba',
 'abb',
 'abc',
 'aca',
 'acb',
 'acc',
 'baa',
 'bab',
 'bac',
 'bba',
 'bbb',
 'bbc',
 'bca',
 'bcb',
 'bcc',
 'caa',
 'cab',
 'cac',
 'cba',
 'cbb',
 'cbc',
 'cca',
 'ccb',
 'ccc']
permutation[lst]:4permutation[lst]:5

def0permutation[lst]:7

Output:

[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]] 

Bài viết này được đóng góp bởi Arpit Agarwal. Nếu bạn thích GeekSforGeeks và muốn đóng góp, bạn cũng có thể viết một bài viết và gửi bài viết của bạn. Xem bài viết của bạn xuất hiện trên trang chính của GeekSforGeek và giúp các chuyên viên máy tính khác. Xin vui lòng viết nhận xét nếu bạn tìm thấy bất cứ điều gì không chính xác hoặc bạn muốn chia sẻ thêm thông tin về chủ đề được thảo luận ở trên & NBSP;Arpit Agarwal. If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to . See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
 


Báo cáo sự cố: Viết một chương trình để tìm tất cả các hoán vị của chuỗi trong Python mà không có iterTools. Write a program to find all the permutations of the string in Python without itertools.

Hoán vị là gì?

Hạ hoán vị là một kỹ thuật được sử dụng để xác định tất cả các chuỗi thu được bằng cách sắp xếp lại các ký tự.

Thí dụ:

  • Các hoán vị của chuỗi ab ab là [‘ab,‘ ba,].
  • Các hoán vị của chuỗi ABC ABC là [‘ABC,‘ ACB, ‘BAC,‘ BCA, ‘CBA,‘ Cab,].

Số lần hoán vị có thể được hình thành từ chuỗi là permutation[lst]:8 [n giai thừa]. Trong đó, n là độ dài của chuỗi đã cho.

Solution:

Ở đây chúng tôi đang sử dụng đệ quy để có được tất cả các hoán vị của chuỗi trong Python.

Tìm thấy các hoán vị trong lập trình Python rất dễ dàng khi sử dụng mô -đun python itertools. Nhưng trong chương trình mã hóa cạnh tranh hoặc phỏng vấn mã hóa, bạn phải sử dụng logic của riêng mình thay vì sử dụng itertools.

Mã Python:

out=[]

def permute[msg, i, length]:
    if i==length:
        out.append["".join[msg]]
    else:
        for j in range[i, length]:
            msg[i], msg[j] = msg[j], msg[i]
            permute[msg, i+1, length]
            msg[j], msg[i] = msg[i], msg[j]

msg="abc"
permute[list[msg], 0, len[msg]]
print[out]

Hàm permutation[lst]:9 lấy danh sách Python làm đầu vào. Vì vậy, bạn phải chuyển đổi chuỗi đã cho thành danh sách bằng hàm

list[d]
00. Sử dụng phương thức
list[d]
01 để chuyển đổi danh sách thành chuỗi.

Output:

['abc', 'acb', 'bac', 'bca', 'cba', 'cab']

Đây là chương trình đơn giản bạn có thể viết để có được tất cả các hoán vị trong Python mà không cần itertools.

Aniruddha Chaudhari

Tôi hoàn thành Nut Python Nut, Love Linux và Vim với tư cách là một biên tập viên. Tôi giữ một bậc thầy về khoa học máy tính từ NIT Trichy. Tôi lao vào C/C ++, Java cũng vậy. Tôi tiếp tục chia sẻ kiến ​​thức mã hóa của mình và kinh nghiệm của riêng tôi trên Csestack.org Portal.CSEstack.org portal.

Tên của bạn cũng có thể được liệt kê ở đây. Có một mẹo? Gửi nó ở đây để trở thành một tác giả CSestack.CSEstack author.

Làm thế nào để bạn tạo ra tất cả các hoán vị của một chuỗi trong Python?

Để tìm tất cả các hoán vị có thể có của một chuỗi đã cho, bạn có thể sử dụng mô -đun ITERTOOLS có một phương thức hữu ích gọi là hoán vị [Itable [, R]]. Phương pháp này trả về hoán vị chiều dài r liên tiếp của các phần tử trong các bộ dữ liệu có thể lặp lại.use the itertools module which has a useful method called permutations[iterable[, r]]. This method return successive r length permutations of elements in the iterable as tuples.

Làm thế nào để bạn tìm thấy hoán vị trong Python?

Đầu tiên nhập gói ITERTOOLS để thực hiện phương thức hoán vị trong Python.Phương thức này lấy một danh sách làm đầu vào và trả về một danh sách đối tượng các bộ dữ liệu chứa tất cả các hoán vị trong một biểu mẫu danh sách.import itertools package to implement the permutations method in python. This method takes a list as an input and returns an object list of tuples that contain all permutations in a list form.

Làm cách nào để in tất cả các kết hợp của một chuỗi?

Thuật toán được sao chép dưới đây.void Combine [String uster, StringBuffer Overtr, int index] {for [int i = index; i

Bài Viết Liên Quan

Chủ Đề