Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 3.x Python:在保持位置的同时由两个字符串组成的字符组合_Python 3.x - Fatal编程技术网

Python 3.x Python:在保持位置的同时由两个字符串组成的字符组合

Python 3.x Python:在保持位置的同时由两个字符串组成的字符组合,python-3.x,Python 3.x,我有两个字符串或单字符列表,希望找出所有可能的组合 结果中应保留原始字符串/列表中字符的位置。 原始字符串/列表具有相同的长度 例如: original_str1 = 'ABC' original_str2 = 'DEF' result = ['ABC','AEC','ABF','AEF','DBC','DEC','DBF','DEF'] 因此,对于位置1,只允许“A”或“D”,位置2允许“B”或“E”,位置3允许“C”或“F” 实现这一目标的最佳方法是什么?可能会帮助您: from ite

我有两个字符串或单字符列表,希望找出所有可能的组合 结果中应保留原始字符串/列表中字符的位置。 原始字符串/列表具有相同的长度

例如:

original_str1 = 'ABC'
original_str2 = 'DEF'

result = ['ABC','AEC','ABF','AEF','DBC','DEC','DBF','DEF']
因此,对于位置1,只允许“A”或“D”,位置2允许“B”或“E”,位置3允许“C”或“F”

实现这一目标的最佳方法是什么?

可能会帮助您:

from itertools import product
result = [''.join(l) for l in product(*zip('ABC', 'DEF'))]
desired_output = ['ABC','AEC','ABF','AEF','DBC','DEC','DBF','DEF']
assert set(result) == set(desired_output)
尽可能多地使用标准库。它通常速度快且编写良好,可以简化代码

下面是stdlib与聪明的纯Python代码的简单计时测试(我使用):


如您所见,stdlib的速度大约快4.5倍,而且更容易理解。

这里有一个不使用itertools的解决方案:

n = len(original_str1)
s = [original_str1, original_str2]

result = [''.join([s[(i>>j)&1][j] for j in range(0, n)]) for i in range(0, 2**n)]

您可以使用
zip
处理参数的重新排列,例如
product(*zip(original\u str1,original\u str2))
n = len(original_str1)
s = [original_str1, original_str2]

result = [''.join([s[(i>>j)&1][j] for j in range(0, n)]) for i in range(0, 2**n)]