Python 仅当第一个元素中存在一个时,才获取列表的组合
初学者问题 给定K个字符的N个元素的列表,所有可能的输出字符串,使得输出字符串的第i个字符来自第i个输入字符串Python 仅当第一个元素中存在一个时,才获取列表的组合,python,Python,初学者问题 给定K个字符的N个元素的列表,所有可能的输出字符串,使得输出字符串的第i个字符来自第i个输入字符串 Example: ex: N=3 K=2 input = ['ab', 'xy', 'mn'] output =['axm' , 'axn', 'ayn','aym', 'bxm' ,'bxn','byn' ,'bym'] 正如您所看到的,输出中的第一个元素总是来自输出中的第一个字符串 任何建议都会有帮助,提前谢谢 这就是我所拥有的 def foo(K, N, str_list):
Example:
ex: N=3 K=2
input = ['ab', 'xy', 'mn']
output =['axm' , 'axn', 'ayn','aym', 'bxm' ,'bxn','byn' ,'bym']
正如您所看到的,输出中的第一个元素总是来自输出中的第一个字符串
任何建议都会有帮助,提前谢谢
这就是我所拥有的
def foo(K, N, str_list):
"""
K int
N int
str_list list[str]
"""
start_element = str_list[0]
rem_list = str_list[1:]
for item in range(N):
word = rem_list[item]
for i in range(K):
print(word[i])
return
我的方法是将第一个元素作为常量,然后在其他元素之间循环,但对于itertools来说,这并不完全有效
使用itertools.product
:
input = ['ab', 'xy', 'mn']
["".join(x) for x in itertools.product(*input)]
结果:
['axm', 'axn', 'aym', 'ayn', 'bxm', 'bxn', 'bym', 'byn']
没有itertools
如果不想使用itertools
,另一种选择是使用递归解决方案:
def cross_prod(l):
if len(l) == 1:
return [c for c in l[0]]
else:
sub_prod = cross_prod(l[1:])
res = [e + sub_res for e in l[0] for sub_res in sub_prod ]
return res
input = ['ab', 'xy', 'mn']
print(cross_prod(input))
结果又是:
['axm', 'axn', 'aym', 'ayn', 'bxm', 'bxn', 'bym', 'byn']
你试过什么?请发布您的代码。我会的,一秒钟后我在输出中看不到“axy”-尽管它确实符合您的定义。那是故意的吗?定义应该更严格吗?因为“xy”在同一个字符串中,所以它将被忽略。一般来说,组合不应该有来自同一个字符串的多个元素。感谢您的努力,也许不使用itertools?(a)我的理解是,您要找的正是叉积的定义。(b) itertools有什么问题?也许你可以对我的方法给出反馈?让我知道我是否走在正确的道路上?@Ryan-注意,实际上没有必要将N和K作为参数传递。你可以从列表中推断出来。出于好奇,你介意说说为什么itertools在你的用例中不起作用吗?我只是好奇。