我有两个列表:a和b。a是包含三个或更多字符串的列表,而b是分隔符列表。你知道吗
我需要生成a的所有可能组合,然后将结果与b的所有可能组合合并(请参见示例以获得更好的理解)。你知道吗
我希望lista中的所有三项都以不同的顺序出现在结果的每一行中(以覆盖或可能的组合)。列表a中的项目不能重复,列表b中的项目可以重复。你知道吗
我不知道如何使它工作,所以你的帮助将不胜感激。你知道吗
谢谢!你知道吗
a = ["test1", "test2", "test3"]
b = ["_", "-", ".", ""]
# Expected result
test1_test2_test3
test2_test1_test3
. . . .
test1_test2-test3
test1_test2.test3
. . . .
test3test2_test1
. . . .
编辑:
from itertools import permutations, combinations, product, chain
a = ["test1", "test2", "test3"]
b = ["_", "-", ".", ""]
a_permutations = permutations(a)
b_permutations = product(b, repeat=len(a)-1)
for ap in a_permutations:
for bp in b_permutations:
result = ''.join([''.join(word) for word in zip(ap, bp)]) + ap[-1]
print result
因为某些原因它不能正常工作。。你知道吗
既然你没有自己的代码,我就给你一些想法。如果你想要更多的细节,编辑你的问题,添加一些你自己的工作,然后问细节。你知道吗
当我查看您想要的列表时,您似乎希望列表
a
中的3个项目没有重复,而列表b
中的两个项目可能有重复,并将两个列表中的项目交错。我还将假设列表b
中的项目数比给定列表a
的长度少一个。(如果这些假设不是您想要的,请在您的问题中明确说明。)不重复的不同顺序的“组合”称为排列。您可以用表达式获得list
a
的所有排列因此,列表
b
中所有可能的项集合对于每个集合中的每对项,可以通过对这两个集合使用
zip()
操作来交错这些项。由于第一个集合比第二个集合长1,因此最后一个项目将被忽略,但您可以将其添加到结果中。你知道吗我可以给你看一行这样的交错,但我应该留下一些东西给你做。使用这些想法来尝试自己的代码。如果你没有完全成功,给我们一个尝试,我会很高兴给你看一些最终的代码。你知道吗
请注意,遵循我的想法将产生一个与您显示的顺序不同的列表。我得到的名单会从
等等。此顺序修复分隔符,然后排列列表
a
中的项。当然,你可以反过来做,得到不同的订单。你知道吗既然您已经展示了自己的一些工作,下面是我的代码。这假设列表
a
和b
没有重复。这也简化了问题的处理,即有一个比分隔符多的项我只是在分隔符元组的末尾添加空分隔符""
。两个长度(项目和分隔符的长度)相等,每个字符串末尾的空分隔符不起任何作用。你知道吗此代码提供打印输出
这可以通过pythonic方式实现,使用
permutations
、product
和combinations
模块来自itertools
下面是工作片段:相关问题 更多 >
编程相关推荐