Hướng dẫn permutation of string in python - hoán vị của chuỗi trong python

Tại sao bạn không đơn giản làm:

from itertools import permutations
perms = [''.join(p) for p in permutations(['s','t','a','c','k'])]
print perms
print len(perms)
print len(set(perms))

Bạn không nhận được trùng lặp như bạn có thể thấy:

 ['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck', 'satkc', 
'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka', 'scatk', 'scakt', 'sckta',
 'sckat', 'sktac', 'sktca', 'skatc', 'skact', 'skcta', 'skcat', 'tsack', 
'tsakc', 'tscak', 'tscka', 'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 
'taksc', 'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas', 'tksac', 
'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck', 'astkc', 'asctk', 'asckt', 
'asktc', 'askct', 'atsck', 'atskc', 'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 
'acskt', 'actsk', 'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs', 
'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta', 'cskat', 'ctsak', 
'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas', 'castk', 'caskt', 'catsk', 'catks', 
'cakst', 'cakts', 'cksta', 'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 
'kstca', 'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc', 'ktacs', 
'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs', 'kacst', 'kacts', 'kcsta', 
'kcsat', 'kctsa', 'kctas', 'kcast', 'kcats']
    120
    120
    [Finished in 0.3s]

Trong ví dụ này, bạn sẽ học cách tính toán tất cả các hoán vị của chuỗi.

Để hiểu ví dụ này, bạn nên có kiến ​​thức về các chủ đề lập trình Python sau:

  • Chuỗi Python
  • Python cho vòng lặp

Hoán vị là phương pháp chọn các phần tử từ một tập hợp theo những cách khác nhau.

Ví dụ: số cách mà các ký tự từ yup có thể được chọn là yup,

 ['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck', 'satkc', 
'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka', 'scatk', 'scakt', 'sckta',
 'sckat', 'sktac', 'sktca', 'skatc', 'skact', 'skcta', 'skcat', 'tsack', 
'tsakc', 'tscak', 'tscka', 'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 
'taksc', 'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas', 'tksac', 
'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck', 'astkc', 'asctk', 'asckt', 
'asktc', 'askct', 'atsck', 'atskc', 'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 
'acskt', 'actsk', 'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs', 
'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta', 'cskat', 'ctsak', 
'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas', 'castk', 'caskt', 'catsk', 'catks', 
'cakst', 'cakts', 'cksta', 'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 
'kstca', 'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc', 'ktacs', 
'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs', 'kacst', 'kacts', 'kcsta', 
'kcsat', 'kctsa', 'kctas', 'kcast', 'kcats']
    120
    120
    [Finished in 0.3s]
1,
 ['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck', 'satkc', 
'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka', 'scatk', 'scakt', 'sckta',
 'sckat', 'sktac', 'sktca', 'skatc', 'skact', 'skcta', 'skcat', 'tsack', 
'tsakc', 'tscak', 'tscka', 'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 
'taksc', 'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas', 'tksac', 
'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck', 'astkc', 'asctk', 'asckt', 
'asktc', 'askct', 'atsck', 'atskc', 'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 
'acskt', 'actsk', 'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs', 
'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta', 'cskat', 'ctsak', 
'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas', 'castk', 'caskt', 'catsk', 'catks', 
'cakst', 'cakts', 'cksta', 'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 
'kstca', 'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc', 'ktacs', 
'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs', 'kacst', 'kacts', 'kcsta', 
'kcsat', 'kctsa', 'kctas', 'kcast', 'kcats']
    120
    120
    [Finished in 0.3s]
2,
 ['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck', 'satkc', 
'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka', 'scatk', 'scakt', 'sckta',
 'sckat', 'sktac', 'sktca', 'skatc', 'skact', 'skcta', 'skcat', 'tsack', 
'tsakc', 'tscak', 'tscka', 'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 
'taksc', 'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas', 'tksac', 
'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck', 'astkc', 'asctk', 'asckt', 
'asktc', 'askct', 'atsck', 'atskc', 'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 
'acskt', 'actsk', 'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs', 
'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta', 'cskat', 'ctsak', 
'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas', 'castk', 'caskt', 'catsk', 'catks', 
'cakst', 'cakts', 'cksta', 'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 
'kstca', 'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc', 'ktacs', 
'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs', 'kacst', 'kacts', 'kcsta', 
'kcsat', 'kctsa', 'kctas', 'kcast', 'kcats']
    120
    120
    [Finished in 0.3s]
3,
 ['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck', 'satkc', 
'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka', 'scatk', 'scakt', 'sckta',
 'sckat', 'sktac', 'sktca', 'skatc', 'skact', 'skcta', 'skcat', 'tsack', 
'tsakc', 'tscak', 'tscka', 'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 
'taksc', 'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas', 'tksac', 
'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck', 'astkc', 'asctk', 'asckt', 
'asktc', 'askct', 'atsck', 'atskc', 'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 
'acskt', 'actsk', 'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs', 
'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta', 'cskat', 'ctsak', 
'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas', 'castk', 'caskt', 'catsk', 'catks', 
'cakst', 'cakts', 'cksta', 'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 
'kstca', 'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc', 'ktacs', 
'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs', 'kacst', 'kacts', 'kcsta', 
'kcsat', 'kctsa', 'kctas', 'kcast', 'kcats']
    120
    120
    [Finished in 0.3s]
4,
 ['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck', 'satkc', 
'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka', 'scatk', 'scakt', 'sckta',
 'sckat', 'sktac', 'sktca', 'skatc', 'skact', 'skcta', 'skcat', 'tsack', 
'tsakc', 'tscak', 'tscka', 'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 
'taksc', 'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas', 'tksac', 
'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck', 'astkc', 'asctk', 'asckt', 
'asktc', 'askct', 'atsck', 'atskc', 'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 
'acskt', 'actsk', 'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs', 
'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta', 'cskat', 'ctsak', 
'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas', 'castk', 'caskt', 'catsk', 'catks', 
'cakst', 'cakts', 'cksta', 'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 
'kstca', 'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc', 'ktacs', 
'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs', 'kacst', 'kacts', 'kcsta', 
'kcsat', 'kctsa', 'kctas', 'kcast', 'kcats']
    120
    120
    [Finished in 0.3s]
5 và không chọn bất kỳ.

Chúng tôi sẽ thực hiện tương tự trong các ví dụ sau.


Ví dụ 1: Sử dụng đệ quy

def get_permutation(string, i=0):

    if i == len(string):   	 
        print("".join(string))

    for j in range(i, len(string)):

        words = [c for c in string]
   
        # swap
        words[i], words[j] = words[j], words[i]
   	 
        get_permutation(words, i + 1)

print(get_permutation('yup'))

Đầu ra

yup
ypu
uyp
upy
puy
pyu
None

Trong ví dụ này, đệ quy được sử dụng để tìm các hoán vị của chuỗi yup.

  • IF điều kiện in
     ['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck', 'satkc', 
    'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka', 'scatk', 'scakt', 'sckta',
     'sckat', 'sktac', 'sktca', 'skatc', 'skact', 'skcta', 'skcat', 'tsack', 
    'tsakc', 'tscak', 'tscka', 'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 
    'taksc', 'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas', 'tksac', 
    'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck', 'astkc', 'asctk', 'asckt', 
    'asktc', 'askct', 'atsck', 'atskc', 'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 
    'acskt', 'actsk', 'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs', 
    'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta', 'cskat', 'ctsak', 
    'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas', 'castk', 'caskt', 'catsk', 'catks', 
    'cakst', 'cakts', 'cksta', 'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 
    'kstca', 'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc', 'ktacs', 
    'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs', 'kacst', 'kacts', 'kcsta', 
    'kcsat', 'kctsa', 'kctas', 'kcast', 'kcats']
        120
        120
        [Finished in 0.3s]
    
    7 được truyền dưới dạng đối số nếu nó bằng chiều dài của
     ['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck', 'satkc', 
    'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka', 'scatk', 'scakt', 'sckta',
     'sckat', 'sktac', 'sktca', 'skatc', 'skact', 'skcta', 'skcat', 'tsack', 
    'tsakc', 'tscak', 'tscka', 'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 
    'taksc', 'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas', 'tksac', 
    'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck', 'astkc', 'asctk', 'asckt', 
    'asktc', 'askct', 'atsck', 'atskc', 'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 
    'acskt', 'actsk', 'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs', 
    'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta', 'cskat', 'ctsak', 
    'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas', 'castk', 'caskt', 'catsk', 'catks', 
    'cakst', 'cakts', 'cksta', 'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 
    'kstca', 'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc', 'ktacs', 
    'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs', 'kacst', 'kacts', 'kcsta', 
    'kcsat', 'kctsa', 'kctas', 'kcast', 'kcats']
        120
        120
        [Finished in 0.3s]
    
    8.
  • Trong mỗi lần lặp của vòng lặp, mỗi ký tự của yup được lưu trữ trong
    def get_permutation(string, i=0):
    
        if i == len(string):   	 
            print("".join(string))
    
        for j in range(i, len(string)):
    
            words = [c for c in string]
       
            # swap
            words[i], words[j] = words[j], words[i]
       	 
            get_permutation(words, i + 1)
    
    print(get_permutation('yup'))
    0.
  • Các yếu tố của các từ được hoán đổi. Theo cách này, chúng tôi đạt được tất cả các kết hợp khác nhau của các nhân vật.
  • Quá trình này tiếp tục cho đến khi đạt được độ dài tối đa.

Ví dụ 2: Sử dụng itertools

from itertools import permutations

words = [''.join(p) for p in permutations('pro')]

print(words)

Đầu ra

['pro', 'por', 'rpo', 'rop', 'opr', 'orp']

Trong ví dụ này, đệ quy được sử dụng để tìm các hoán vị của chuỗi yup.

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọc

    Input :  str = 'ABC'
    Output : ABC 
             ACB 
             BAC 
             BCA 
             CAB 
             CBA

    Bàn luận

    Python3

    def get_permutation(string, i=0):
    
        if i == len(string):   	 
            print("".join(string))
    
        for j in range(i, len(string)):
    
            words = [c for c in string]
       
            # swap
            words[i], words[j] = words[j], words[i]
       	 
            get_permutation(words, i + 1)
    
    print(get_permutation('yup'))
    2
    def get_permutation(string, i=0):
    
        if i == len(string):   	 
            print("".join(string))
    
        for j in range(i, len(string)):
    
            words = [c for c in string]
       
            # swap
            words[i], words[j] = words[j], words[i]
       	 
            get_permutation(words, i + 1)
    
    print(get_permutation('yup'))
    3
    def get_permutation(string, i=0):
    
        if i == len(string):   	 
            print("".join(string))
    
        for j in range(i, len(string)):
    
            words = [c for c in string]
       
            # swap
            words[i], words[j] = words[j], words[i]
       	 
            get_permutation(words, i + 1)
    
    print(get_permutation('yup'))
    4
    def get_permutation(string, i=0):
    
        if i == len(string):   	 
            print("".join(string))
    
        for j in range(i, len(string)):
    
            words = [c for c in string]
       
            # swap
            words[i], words[j] = words[j], words[i]
       	 
            get_permutation(words, i + 1)
    
    print(get_permutation('yup'))
    5

    def get_permutation(string, i=0):
    
        if i == len(string):   	 
            print("".join(string))
    
        for j in range(i, len(string)):
    
            words = [c for c in string]
       
            # swap
            words[i], words[j] = words[j], words[i]
       	 
            get_permutation(words, i + 1)
    
    print(get_permutation('yup'))
    4
     ['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck', 'satkc', 
    'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka', 'scatk', 'scakt', 'sckta',
     'sckat', 'sktac', 'sktca', 'skatc', 'skact', 'skcta', 'skcat', 'tsack', 
    'tsakc', 'tscak', 'tscka', 'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 
    'taksc', 'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas', 'tksac', 
    'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck', 'astkc', 'asctk', 'asckt', 
    'asktc', 'askct', 'atsck', 'atskc', 'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 
    'acskt', 'actsk', 'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs', 
    'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta', 'cskat', 'ctsak', 
    'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas', 'castk', 'caskt', 'catsk', 'catks', 
    'cakst', 'cakts', 'cksta', 'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 
    'kstca', 'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc', 'ktacs', 
    'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs', 'kacst', 'kacts', 'kcsta', 
    'kcsat', 'kctsa', 'kctas', 'kcast', 'kcats']
        120
        120
        [Finished in 0.3s]
    
    7

    Input :  str = 'ABC'
    Output : ABC 
             ACB 
             BAC 
             BCA 
             CAB 
             CBA
    4
    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    2
    Input :  str = 'ABC'
    Output : ABC 
             ACB 
             BAC 
             BCA 
             CAB 
             CBA
    6

    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    0
    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    7
    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    8
    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    9
    from itertools import permutations
    
    words = [''.join(p) for p in permutations('pro')]
    
    print(words)
    0
    from itertools import permutations
    
    words = [''.join(p) for p in permutations('pro')]
    
    print(words)
    1

    from itertools import permutations
    
    words = [''.join(p) for p in permutations('pro')]
    
    print(words)
    2
    from itertools import permutations
    
    words = [''.join(p) for p in permutations('pro')]
    
    print(words)
    3
    from itertools import permutations
    
    words = [''.join(p) for p in permutations('pro')]
    
    print(words)
    4

    from itertools import permutations
    
    words = [''.join(p) for p in permutations('pro')]
    
    print(words)
    5
    from itertools import permutations
    
    words = [''.join(p) for p in permutations('pro')]
    
    print(words)
    6
    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    2
    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    2
    from itertools import permutations
    
    words = [''.join(p) for p in permutations('pro')]
    
    print(words)
    9

    ['pro', 'por', 'rpo', 'rop', 'opr', 'orp']
    0
    def get_permutation(string, i=0):
    
        if i == len(string):   	 
            print("".join(string))
    
        for j in range(i, len(string)):
    
            words = [c for c in string]
       
            # swap
            words[i], words[j] = words[j], words[i]
       	 
            get_permutation(words, i + 1)
    
    print(get_permutation('yup'))
    8
    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    2
    ['pro', 'por', 'rpo', 'rop', 'opr', 'orp']
    3

    ['pro', 'por', 'rpo', 'rop', 'opr', 'orp']
    0
    def get_permutation(string, i=0):
    
        if i == len(string):   	 
            print("".join(string))
    
        for j in range(i, len(string)):
    
            words = [c for c in string]
       
            # swap
            words[i], words[j] = words[j], words[i]
       	 
            get_permutation(words, i + 1)
    
    print(get_permutation('yup'))
    7
    def get_permutation(string, i=0):
    
        if i == len(string):   	 
            print("".join(string))
    
        for j in range(i, len(string)):
    
            words = [c for c in string]
       
            # swap
            words[i], words[j] = words[j], words[i]
       	 
            get_permutation(words, i + 1)
    
    print(get_permutation('yup'))
    8
    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    5

    Output:

    ABC
    ACB
    BAC
    BCA
    CAB
    CBA

    Hoán vị và kết hợp trong hoán vị Python của một chuỗi nhất định với các ký tự lặp lại ý tưởng là sử dụng từ điển để tránh in bản sao. & Nbsp;Permutations of a given string with repeating characters The idea is to use dictionary to avoid printing duplicates. 

    Python3

    def get_permutation(string, i=0):
    
        if i == len(string):   	 
            print("".join(string))
    
        for j in range(i, len(string)):
    
            words = [c for c in string]
       
            # swap
            words[i], words[j] = words[j], words[i]
       	 
            get_permutation(words, i + 1)
    
    print(get_permutation('yup'))
    2
    def get_permutation(string, i=0):
    
        if i == len(string):   	 
            print("".join(string))
    
        for j in range(i, len(string)):
    
            words = [c for c in string]
       
            # swap
            words[i], words[j] = words[j], words[i]
       	 
            get_permutation(words, i + 1)
    
    print(get_permutation('yup'))
    3
    def get_permutation(string, i=0):
    
        if i == len(string):   	 
            print("".join(string))
    
        for j in range(i, len(string)):
    
            words = [c for c in string]
       
            # swap
            words[i], words[j] = words[j], words[i]
       	 
            get_permutation(words, i + 1)
    
    print(get_permutation('yup'))
    4
    def get_permutation(string, i=0):
    
        if i == len(string):   	 
            print("".join(string))
    
        for j in range(i, len(string)):
    
            words = [c for c in string]
       
            # swap
            words[i], words[j] = words[j], words[i]
       	 
            get_permutation(words, i + 1)
    
    print(get_permutation('yup'))
    5

    def get_permutation(string, i=0):
    
        if i == len(string):   	 
            print("".join(string))
    
        for j in range(i, len(string)):
    
            words = [c for c in string]
       
            # swap
            words[i], words[j] = words[j], words[i]
       	 
            get_permutation(words, i + 1)
    
    print(get_permutation('yup'))
    4
     ['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck', 'satkc', 
    'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka', 'scatk', 'scakt', 'sckta',
     'sckat', 'sktac', 'sktca', 'skatc', 'skact', 'skcta', 'skcat', 'tsack', 
    'tsakc', 'tscak', 'tscka', 'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 
    'taksc', 'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas', 'tksac', 
    'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck', 'astkc', 'asctk', 'asckt', 
    'asktc', 'askct', 'atsck', 'atskc', 'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 
    'acskt', 'actsk', 'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs', 
    'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta', 'cskat', 'ctsak', 
    'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas', 'castk', 'caskt', 'catsk', 'catks', 
    'cakst', 'cakts', 'cksta', 'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 
    'kstca', 'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc', 'ktacs', 
    'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs', 'kacst', 'kacts', 'kcsta', 
    'kcsat', 'kctsa', 'kctas', 'kcast', 'kcats']
        120
        120
        [Finished in 0.3s]
    
    7

    Input :  str = 'ABC'
    Output : ABC 
             ACB 
             BAC 
             BCA 
             CAB 
             CBA
    4
    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    2
    Input :  str = 'ABC'
    Output : ABC 
             ACB 
             BAC 
             BCA 
             CAB 
             CBA
    6

    Input :  str = 'ABC'
    Output : ABC 
             ACB 
             BAC 
             BCA 
             CAB 
             CBA
    7
    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    2
    Input :  str = 'ABC'
    Output : ABC 
             ACB 
             BAC 
             BCA 
             CAB 
             CBA
    9

    ABC
    ACB
    BAC
    BCA
    CAB
    CBA
    0
    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    2
    ABC
    ACB
    BAC
    BCA
    CAB
    CBA
    2

    ABC
    ACB
    BAC
    BCA
    CAB
    CBA
    3
    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    2
    ABC
    ACB
    BAC
    BCA
    CAB
    CBA
    5

    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    7
    ABC
    ACB
    BAC
    BCA
    CAB
    CBA
    77____39
    from itertools import permutations
    
    words = [''.join(p) for p in permutations('pro')]
    
    print(words)
    0
    GEEK
    GEKE
    GKEE
    EGEK
    EGKE
    EEGK
    EEKG
    EKGE
    EKEG
    KGEE
    KEGE
    KEEG
    0

    ['pro', 'por', 'rpo', 'rop', 'opr', 'orp']
    0
    from itertools import permutations
    
    words = [''.join(p) for p in permutations('pro')]
    
    print(words)
    5
    GEEK
    GEKE
    GKEE
    EGEK
    EGKE
    EEGK
    EEKG
    EKGE
    EKEG
    KGEE
    KEGE
    KEEG
    3
    GEEK
    GEKE
    GKEE
    EGEK
    EGKE
    EEGK
    EEKG
    EKGE
    EKEG
    KGEE
    KEGE
    KEEG
    4
    yup
    ypu
    uyp
    upy
    puy
    pyu
    None
    9
    GEEK
    GEKE
    GKEE
    EGEK
    EGKE
    EEGK
    EEKG
    EKGE
    EKEG
    KGEE
    KEGE
    KEEG
    6

    GEEK
    GEKE
    GKEE
    EGEK
    EGKE
    EEGK
    EEKG
    EKGE
    EKEG
    KGEE
    KEGE
    KEEG
    7
    GEEK
    GEKE
    GKEE
    EGEK
    EGKE
    EEGK
    EEKG
    EKGE
    EKEG
    KGEE
    KEGE
    KEEG
    8

    GEEK
    GEKE
    GKEE
    EGEK
    EGKE
    EEGK
    EEKG
    EKGE
    EKEG
    KGEE
    KEGE
    KEEG
    7
    from itertools import permutations
    
    words = [''.join(p) for p in permutations('pro')]
    
    print(words)
    3yup1

    Output:

    GEEK
    GEKE
    GKEE
    EGEK
    EGKE
    EEGK
    EEKG
    EKGE
    EKEG
    KGEE
    KEGE
    KEEG

    Độ phức tạp về thời gian: O (n!) Trong đó n là kích thước của chuỗi.AUXILIARY: O (n!) & NBSP; O(n!) where n is the size of the string.
    Auxiliary Space: O(n!) 


    Làm thế nào để bạn tìm thấy các hoán vị 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 in 3 hoán vị trong Python?

    Python tạo ra một chương trình chạy qua tất cả các kết hợp có thể..
    từ các kết hợp nhập khẩu itertools ..
    lst = ["a", "b", "c"].
    LongofStrings = 3 ..
    Đối với tôi trong các kết hợp (LST, LongofStrings):.
    print(i).

    Làm thế nào để bạn hoán vị một danh sách trong Python?

    Ngày nay, chúng ta sẽ học cách có được các hoán vị có thể của một danh sách bằng cách sử dụng các phương thức khác nhau trong Python ...
    nhập itertools ..
    L = [2, 4, 6].
    r = 2 ..
    P = list (itertools. Permutations (L, R)).
    print(p).

    Làm thế nào để bạn thực hiện hoán vị trong Python mà không có itertools?

    A. Để tạo các kết hợp mà không cần sử dụng iterTools, hãy lặp lại danh sách một và sửa phần tử đầu tiên của danh sách và tạo kết hợp với danh sách còn lại.Tương tự, lặp lại với tất cả các yếu tố danh sách từng cái một bằng cách đệ quy của danh sách còn lại.iterate the list one by one and fix the first element of the list and make combinations with the remaining list. Similarly, iterate with all the list elements one by one by recursion of the remaining list.