我有以下字符串:
'aa-df-bvc'
'hj-j-klegt-dew'
我想要将所有“-”都删除1的所有组合。我想要的输出如下:
{'aadf-bvc','aa-dfbvc','aadfbvc'}
{'hjj-klegt-dew','hj-jklegt-dew','hj-j-klegtdew','hjjklegt-dew','hj-jklegtdew', 'hjj-klegtdew', 'hjjklegtdew'}
我试图用一个出现次数“-”和一个while循环的for循环来解决它,但是我的逻辑有点不对劲,所以代码没有实现我想要的。
答案 0 :(得分:3)
一个可能的变体。
使用itertools.product
可以轻松获得n个元素序列中("-", "")
的所有组合,例如:
>>> print(list(product(("-", ""), repeat=2)))
[('-', '-'), ('-', ''), ('', '-'), ('', '')]
对于每个组合,根据"-"
和""
的顺序连接字符串的所有部分(由于您不希望将其与所有"-"
组合使用,所以将其删除)。
代码:
from itertools import product
def get_all_combinations(s, sep="-"):
results = []
sep_no = s.count(sep)
s_pieces = s.split(sep)
for c in product((sep, ""), repeat=sep_no):
results.append("".join(sum(zip(s_pieces, c + ("",)), ())))
results.remove(s) # if you don't want the all-"-" combo
return results
s = 'aa-df-bvc'
t = 'hj-j-klegt-dew'
>>> print(get_all_combinations(s))
>>> print(get_all_combinations(t))
输出:
['aa-dfbvc', 'aadf-bvc', 'aadfbvc']
['hj-j-klegtdew', 'hj-jklegt-dew', 'hj-jklegtdew', 'hjj-klegt-dew', 'hjj-klegtdew', 'hjjklegt-dew', 'hjjklegtdew']
答案 1 :(得分:1)
我能够解决它:-)
这是我的代码:
def getAllCombinations(w):
to_return = [w]
for number_to_remove in range(1,w.count('-')):
offs = -1
counter = w.count('-')
while True:
if number_to_remove > counter:
break
else:
offs = w.find('-', offs + 1)
counter -= 1
if offs == -1:
break
removed = w[0: offs] + w[offs:].replace('-', '', number_to_remove)
to_return.append(removed)
return to_return
也许有更好的方法可以做到这一点?
答案 2 :(得分:0)
一个简单的版本:
a = 'aa-df-bvc'
a = a.split("-")
before = ""
for i in range(len(a)):
if i+1 != len(a):
result = ""
for string in a[i:]:
before = before + string
result = before + "-"
break
result = result + "".join(a[i+1:])
else:
result = "".join(a)
print("result: {0}".format(result))