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中从0到3**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中生成字符串的所有排列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:在不使用迭代工具的情况下在Python中生成字符串的所有排列
基础教程推荐
猜你喜欢
- 比较两个文本文件以找出差异并将它们输出到新的文本文件 2022-01-01
- Python,确定字符串是否应转换为 Int 或 Float 2022-01-01
- 在 Python 中将货币解析为数字 2022-01-01
- 究竟什么是“容器"?在蟒蛇?(以及所有的 python 容器类型是什么?) 2022-01-01
- Kivy 使用 opencv.调整图像大小 2022-01-01
- matplotlib 设置 yaxis 标签大小 2022-01-01
- Python 中是否有任何支持将长字符串转储为块文字或折叠块的 yaml 库? 2022-01-01
- kivy 应用程序中的一个简单网页作为小部件 2022-01-01
- 在 Django Admin 中使用内联 OneToOneField 2022-01-01
- 对多索引数据帧的列进行排序 2022-01-01
