我正在尝试编写一个获取一组字符串的脚本-
["ab", "ls", "u"]
然后创建它们的所有可能组合,但不一定要全部使用它们。我希望以上示例的可能输出为:
ab
ab ls
ab ls u
ab u ls
ab u
ls
ls ab
ls ab u
ls u ab
ls u
u
u ls
u ls ab
u ab ls
u ab
我的脚本删除了它的其他功能:
stuff = ["ab", "ls", "u"]
for subset in itertools.permutations(stuff):
concat = ""
for part in subset:
concat = concat + part
#the rest of my script now uses this data
它返回:
ablsu
abuls
lsabu
lsuab
uabls
ulsab
我如何使它返回我想要的东西?
答案 0 :(得分:2)
您可以一起使用组合和排列。这样应该可以使您前进
a = ["ab", "ls", "u"]
for i in range(1, len(a)+1):
for comb in combinations(a, i):
for perm in permutations(comb):
print(perm)
输出:
('ab',)
('ls',)
('u',)
('ab', 'ls')
('ls', 'ab')
('ab', 'u')
('u', 'ab')
('ls', 'u')
('u', 'ls')
('ab', 'ls', 'u')
('ab', 'u', 'ls')
('ls', 'ab', 'u')
('ls', 'u', 'ab')
('u', 'ab', 'ls')
('u', 'ls', 'ab')
您可以处理comb
合适的方式
答案 1 :(得分:2)
当您给出包含3个元素排列的列表时,您将获得所有3个元素的返回结果。
您需要提供1个元素才能获得ab
/ ls
/ u
的输出。
您需要提供2个元素,才能在输出中获得ab ls
/ ab u
。
因此,您可以使用列表中的1/2个元素来调用该程序。
stuff = ["ab", "ls", "u"]
for subset in itertools.permutations(stuff):
concat = ""
for part in subset:
concat = concat + part
#the rest of my script now uses this data
stuff = ["ab", "ls"]
for subset in itertools.permutations(stuff):
concat = ""
for part in subset:
concat = concat + part
stuff = ["ls", "u"]
for subset in itertools.permutations(stuff):
concat = ""
for part in subset:
concat = concat + part
答案 2 :(得分:1)
stuff = ["ab", "ls", "u"]
final_list = []
for subset in itertools.permutations(stuff):
concat = ""
for part in subset:
concat = concat + part
final_list.append(concat)
print(final_list)
['ab',
'abls',
'ablsu',
'ab',
'abu',
'abuls',
'ls',
'lsab',
'lsabu',
'ls',
'lsu',
'lsuab',
'u',
'uab',
'uabls',
'u',
'uls',
'ulsab']
答案 3 :(得分:0)
()
('ab',)
('ab', 'ls')
('ls', 'ab')
('ab', 'ls', 'u')
('ab', 'u', 'ls')
('ls', 'ab', 'u')
('ls', 'u', 'ab')
('u', 'ab', 'ls')
('u', 'ls', 'ab')
但是此解决方案显示了所有排列::
def solution(ranks)