据我们所知combinations('ABCD', 2)
给出AB AC AD BC BD CD
作为结果
现在我需要的是一个导致这个结果的函数AB BC CD DA
* 如果是('ABCD',3)我需要'ABC''BCD''CDA''DAB'
所以您可能会说的规则是:
AC BD
DA
我知道可以通过一些复杂的for循环来完成,但是如果真的很大的字符串不会“太慢”吗?
最后要提的是,如果可以提供任何帮助,我将把这些结果存储为字典的键。
答案 0 :(得分:2)
虽然不会太复杂:
>>> [s[i:i + 2] for i in range(len(s)-1)] + [s[-1] + s[0]]
['AB', 'BC', 'CD', 'DA']
相当于:
results = []
s = 'ABCD'
for i in range(len(s)-1):
results.append(s[i:i + 2])
results.append(s[-1] + s[0])
答案 1 :(得分:1)
def combinations(my_string, n):
result = []
for i in range(0,len(my_string)-n+1):
result.append(my_string[i:i+n])
result.append(my_string[-1]+my_string[0:n-1])
return result
可扩展且与组合方法一样快。
更新:
IDK,如果上述代码适合您或此代码,请提供更好的测试用例。
def combination(string, n):
result = []
for i in range(0,len(string)-n+1):
result.append(string[i:i+n])
for i in range(len(string)-n+1,len(string)):
result.append( string[i:i+n] + string[0:n-len(string)+i] )
return result