在不使用迭代工具的情况下在Python中生成字符串的所有排列

Generate all permutations of a string in Python without using itertools(在不使用迭代工具的情况下在Python中生成字符串的所有排列)
本文介绍了在不使用迭代工具的情况下在Python中生成字符串的所有排列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要生成字符串中所有可能的字符排列(带有重复)。如果字符串为‘abc’,则输出应为:

AAA AAB AAC ABC ..。 CBC CCA 建行 Ccc

我不能使用IterTools模块,也不想使用递归(因为这只是一个示例。我真正需要的是输出数百万个排列,并且我害怕耗尽内存)

我可以这样做:

s = 'abc'

for c1 in range(0, 3):
    for c2 in range(0, 3):
        for c3 in range(0, 3):
            print(s[c1]+s[c2]+s[c3])

基本上,我的for循环数与字符串的字符数一样多。 现在假设字符串的长度为10,例如!

有没有更好的方法?

推荐答案

解决此问题的一种简单方法是将字符串中的字符视为特殊数字系统中的数字。弦的长度是底数。因此,'abc'的排列(重复)对应于基数3中从03**3-1的数字,其中'a'是数字0'b'1'c'2

def permutations_with_repetition(s):
    base = len(s)
    for n in range(base**base):
        yield "".join(s[n // base**(base-d-1) % base] for d in range(base))

示例运行:

>>> for p in permutations_with_repetition("abc"):
    print(p)


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

如果允许使用itertools,您会希望itertools.product带有repeat关键字参数:itertools.product("abc", repeat=3)

这篇关于在不使用迭代工具的情况下在Python中生成字符串的所有排列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)