Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建给定字符集k和lemgth n的所有字符串_Python_Math_Permutation - Fatal编程技术网

Python 创建给定字符集k和lemgth n的所有字符串

Python 创建给定字符集k和lemgth n的所有字符串,python,math,permutation,Python,Math,Permutation,因此,我无法在网上找到以下问题的确切答案。 如果我有一组字符k,并且我想在长度n的字符串中进行所有可能的组合,那么每个字符应该在字符串中至少出现一次,我说'abc'='cba'。 我需要一些代码来获取这些字符串。(因此,没有重复的代码,如'abc'=='cba'),我尝试了几个嵌套循环和递归代码块,但都没有对我起作用,希望你们能帮助我!(Python是我的主要语言,如果答案可以是这种语言,那就太好了) 例如: In: chars = ['a', 'b', 'c'] length = 5 Out:

因此,我无法在网上找到以下问题的确切答案。
如果我有一组字符
k
,并且我想在长度
n
的字符串中进行所有可能的组合,那么每个字符应该在字符串中至少出现一次,我说
'abc'='cba'
。 我需要一些代码来获取这些字符串。(因此,没有重复的代码,如
'abc'=='cba'
),我尝试了几个嵌套循环和递归代码块,但都没有对我起作用,希望你们能帮助我!(Python是我的主要语言,如果答案可以是这种语言,那就太好了)

例如:

In:
chars = ['a', 'b', 'c']
length = 5
Out:
'abccc', 'abbcc', 'abbbc', 'aabcc', 'aabbc', 'aaabc'

itertools
可以为您提供最便捷的服务:

>>> def gen(s, count):
...     for comb in itertools.combinations_with_replacement(s, count):
...         if len(set(comb)) == len(s):
...             yield ''.join(comb)
...             
>>> [s for s in gen('abc', 5)]
['aaabc', 'aabbc', 'aabcc', 'abbbc', 'abbcc', 'abccc']

在生成要过滤掉的组合时效率很低,但是如果不是性能关键的代码,那么不要过早地担心这一点

itertools
可以为您提供最便捷的方式:

>>> def gen(s, count):
...     for comb in itertools.combinations_with_replacement(s, count):
...         if len(set(comb)) == len(s):
...             yield ''.join(comb)
...             
>>> [s for s in gen('abc', 5)]
['aaabc', 'aabbc', 'aabcc', 'abbbc', 'abbcc', 'abccc']

在生成要过滤掉的组合时效率很低,但是如果不是性能关键的代码,那么不要过早地担心这一点

您只需使用
itertools
即可:

import itertools

def generate_strings(chars,n):
    return [''.join(x) for x in itertools.combinations_with_replacement(chars,n) if all(c in x for c in chars)]
这是因为,
compositions\u with\u replacement(..)
会生成给定元素的元组,正如其名称所示,但每个元素都可能出现多次。因此:

>>> list(itertools.combinations_with_replacement(['a','b'],3))
[('a', 'a', 'a'), ('a', 'a', 'b'), ('a', 'b', 'b'), ('b', 'b', 'b')]
现在,我们执行一个附加过滤:

... if all(c in x for c in chars)
因此,我们检查将生成的字符串中是否存在所有字符

现在我们调用
''.join(..)
来将元组中的字符连接到一个字符串中。因此,对于上面的示例,我们将生成
[“aab”,“abb”]

对于给定的查询,它将生成:

>>> generate_strings(['a','b','c'],5)
['aaabc', 'aabbc', 'aabcc', 'abbbc', 'abbcc', 'abccc']

您只需使用
itertools
即可:

import itertools

def generate_strings(chars,n):
    return [''.join(x) for x in itertools.combinations_with_replacement(chars,n) if all(c in x for c in chars)]
这是因为,
compositions\u with\u replacement(..)
会生成给定元素的元组,正如其名称所示,但每个元素都可能出现多次。因此:

>>> list(itertools.combinations_with_replacement(['a','b'],3))
[('a', 'a', 'a'), ('a', 'a', 'b'), ('a', 'b', 'b'), ('b', 'b', 'b')]
现在,我们执行一个附加过滤:

... if all(c in x for c in chars)
因此,我们检查将生成的字符串中是否存在所有字符

现在我们调用
''.join(..)
来将元组中的字符连接到一个字符串中。因此,对于上面的示例,我们将生成
[“aab”,“abb”]

对于给定的查询,它将生成:

>>> generate_strings(['a','b','c'],5)
['aaabc', 'aabbc', 'aabcc', 'abbbc', 'abbcc', 'abccc']

参加未更改的部分-此处为“abc”

使用递归方式或其他方法生成长度为(n-k)的所有字符串,这里是“aa”、“ab”、“ac”、“bb”、“bc”、“cc”


将未更改的部分与每个生成的字符串合并

获取未更改的部分-此处为“abc”

使用递归方式或其他方法生成长度为(n-k)的所有字符串,这里是“aa”、“ab”、“ac”、“bb”、“bc”、“cc”


将未更改的部分与生成的每个字符串合并

请在此处发布您的尝试。堆栈溢出不是人们为您编写代码的地方。好吧,编写代码只是额外的,如果我了解解决问题的方法,我可以自己编写代码。尽管如此,感谢您的回复,我将在下次添加代码!请在这里发布您的尝试。堆栈溢出不是人们为您编写代码的地方。好吧,编写代码只是额外的,如果我了解解决问题的方法,我可以自己编写代码。尽管如此,感谢您的回复,我将在下次添加代码!“每个字符在字符串“@wim:fixed,better”中至少出现一次?每个字符在字符串“@wim:fixed,better”中至少出现一次?谢谢!我应该知道这有内置的功能,下次会对文档做更多的研究。谢谢!我应该知道这有内置的功能,下次我会对文档做更多的研究。