我在用python实现发行版时遇到问题

2024-09-29 03:27:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想编写函数all_possible(word, n),其中word是字符串,其中没有空格,n|的个数。我需要把|放在word中,这样我的输出就是所有可能的字符串的列表,在字符之间插入|

例如:

letters = 'abcdefghijklmnopqrstuvwxyz'
print(all_possible(letters, 7)
>> ['a|b|c|d|e|f|g|hijklmnopqrstuvwxyz', 'a|b|c|d|e|f|gh|ijklmnopqrstuvwxyz', 'a|b|c|d|e|f|ghi|jklmnopqrstuvwxyz'...]

这就是我到目前为止所做的:

def all_possible(word, n):
    word = list(word)
    l = ['|'] * n
    k = 1
    for c in l:
        word.insert(k, c)
        k += 2
    word = ''.join(word)
    return word

现在需要帮忙吗


Tags: 函数字符串列表all字符ghword空格
1条回答
网友
1楼 · 发布于 2024-09-29 03:27:39

您将无法使用单个循环来完成此操作。您可以尝试使用itertools.combination()。例如,combos = combinations(range(1, 26), 7)将为您提供一个迭代器,该迭代器列出您应该在之前插入栏的字母的所有索引(借助enumerate来跟踪您要添加的字母数量:

letters = 'abcdefghijklmnopqrstuvwxyz'

combos = combinations(range(1, 26), 2)

for indices in combos:
    l = list(letters)
    for i, n in enumerate(indices):
        l.insert(i + n, '|')
    print("".join(l))

印刷品:

a|b|cdefghijklmnopqrstuvwxyz
a|bc|defghijklmnopqrstuvwxyz
a|bcd|efghijklmnopqrstuvwxyz
...
abcdefghijklmnopqrstuvwx|y|z

您可以将2更改为7,但需要注意的是,它有很多组合

您还可以递归地这样做,因为在每个字母之间插入一个单条就是一个循环。插入两个单条等同于插入一个单条,然后对单条后面的字符串执行相同的操作

def insert_bars(s, n):
    if n == 0:
        yield s
    else:
        for i in range(1, len(s) - n+1):
            for rest in insert_bars(s[i:], n-1):
                yield s[:i] + '|' + rest
l = list(insert_bars(letters, 7))

l的长度为480700:

['a|b|c|d|e|f|gh|ijklmnopqrstuvwxyz',
 'a|b|c|d|e|f|ghi|jklmnopqrstuvwxyz',
 'a|b|c|d|e|f|ghij|klmnopqrstuvwxyz',
 'a|b|c|d|e|f|ghijk|lmnopqrstuvwxyz',
 'a|b|c|d|e|f|ghijkl|mnopqrstuvwxyz',
 'a|b|c|d|e|f|ghijklm|nopqrstuvwxyz',
 'a|b|c|d|e|f|ghijklmn|opqrstuvwxyz',
 'a|b|c|d|e|f|ghijklmno|pqrstuvwxyz',
 ...
 'abcdefghijklmnopqr|s|t|u|v|w|x|yz',
 'abcdefghijklmnopqr|s|t|u|v|w|xy|z',
 'abcdefghijklmnopqr|s|t|u|v|wx|y|z',
 'abcdefghijklmnopqr|s|t|u|vw|x|y|z',
 'abcdefghijklmnopqr|s|t|uv|w|x|y|z',
 'abcdefghijklmnopqr|s|tu|v|w|x|y|z',
 'abcdefghijklmnopqr|st|u|v|w|x|y|z',
 'abcdefghijklmnopqrs|t|u|v|w|x|y|z']

 

相关问题 更多 >