python - 如何获取python中字母的所有可能字符串?
问题描述
例如,给定字母 = 'abcd',我如何在 Python 中获得此输出:
a
aa
b
bb
ab
ba
(...)
逐次迭代。
我已经尝试过在 stackoverflow 上找到的 powerset() 函数,但它不会在同一个字符串中重复字母。
另外,如果我想设置字符串可以具有的最小和最大限制,我该怎么做?
例如 min=3 和 max=4, abc, aaa, aba, ..., aaaa, abca, abcb, ...
解决方案
您可以使用combinations_with_replacement
itertools ( docs )。该函数combinations_with_replacement
将一个可迭代对象作为其第一个参数(例如您的字母表)以及要生成的组合的所需长度。由于您需要不同长度的字符串,因此您可以遍历每个所需长度。
例如:
from itertools import combinations_with_replacement
def get_all_poss_strings(alphabet, min_length, max_length):
poss_strings = []
for r in range(min_length, max_length + 1):
poss_strings += combinations_with_replacement(alphabet, r)
return ["".join(s) for s in poss_strings] # combinations_with_replacement returns tuples, so join them into individual strings
样本:
alphabet = "abcd"
min_length = 3
max_length = 4
get_all_poss_strings(alphabet, min_length, max_length)
输出:
['aaa', 'aab', 'aac', 'aad', 'abb', 'abc', 'abd', 'acc', 'acd', 'add', 'bbb', 'bbc', 'bbd', 'bcc', 'bcd', 'bdd', 'ccc', 'ccd', 'cdd', 'ddd', 'aaaa', 'aaab', 'aaac', 'aaad', 'aabb', 'aabc', 'aabd', 'aacc', 'aacd', 'aadd', 'abbb', 'abbc', 'abbd', 'abcc', 'abcd', 'abdd', 'accc', 'accd', 'acdd', 'addd', 'bbbb', 'bbbc', 'bbbd', 'bbcc', 'bbcd', 'bbdd', 'bccc', 'bccd', 'bcdd', 'bddd', 'cccc', 'cccd', 'ccdd', 'cddd', 'dddd']
编辑:
如果顺序对您的字符串也很重要(如具有"ab"
和所示"ba"
),您可以使用以下函数获取给定范围内所有长度的所有排列:
from itertools import combinations_with_replacement, permutations
def get_all_poss_strings(alphabet, min_length, max_length):
poss_strings = []
for r in range(min_length, max_length + 1):
combos = combinations_with_replacement(alphabet, r)
perms_of_combos = []
for combo in combos:
perms_of_combos += permutations(combo)
poss_strings += perms_of_combos
return list(set(["".join(s) for s in poss_strings]))
样本:
alphabet = "abcd"
min_length = 1
max_length = 2
get_all_poss_strings(alphabet, min_length, max_length)
输出:
['a', 'aa', 'ab', 'ac', 'ad', 'b', 'ba', 'bb', 'bc', 'bd', 'c', 'ca', 'cb', 'cc', 'cd', 'd', 'da', 'db', 'dc', 'dd']
推荐阅读
- python - Creating a dictionary of categoricals in SQL and aggregating them in Python
- javascript - daterangepicker how to get value and push 1day to show date on input text
- xml - 使用 PowerShell 获取 XML 值
- javascript - 可以安全地假设索引中的顺序与存储键的上部相同吗?
- css - 使用输入字段实现导航栏:背景颜色和文本颜色
- powershell - 更正 PowerShell 脚本以显示带有 Exchange 邮箱的禁用 AD 用户帐户(不是共享邮箱)及其大小(以 MB 为单位)?
- html - 在弹出窗口中显示 base64 图像仅显示图像的一部分?
- mysql - MySQL Workbench 未在 ubuntu 上打开
- apache - 删除 XAMPP 中 URL 的最后一个斜杠
- sql - 向表中添加列和数据