搜索类似于combination()的函数或者我如何创建一个函数,给定一些'规则'

时间:2013-11-18 18:09:42

标签: python combinations itertools

据我们所知combinations('ABCD', 2)给出AB AC AD BC BD CD作为结果 现在我需要的是一个导致这个结果的函数AB BC CD DA * 如果是('ABCD',3)我需要'ABC''BCD''CDA''DAB'
所以您可能会说的规则是:

  1. 不要在第一个范例中“跳转”任何字符,如AC BD
  2. 包括最后一个字符DA
  3. 的组合
  4. 具有可扩展性,具有长字符串和相对较大的n
  5. 的能力
  6. *!其中一个组合必须将最后一个字符连接到第一个字符
  7. 我知道可以通过一些复杂的for循环来完成,但是如果真的很大的字符串不会“太慢”吗?

    最后要提的是,如果可以提供任何帮助,我将把这些结果存储为字典的键。

2 个答案:

答案 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