【问题标题】:How do you separate all possible substrings in a string?如何分隔字符串中所有可能的子字符串?
【发布时间】:2021-08-25 00:40:15
【问题描述】:

比如说:

Str = "abc"

我想要的输出是:

a, b, c, ab, bc, abc

目前为止:

#input
Str = input("Please enter a word: ")
#len of word
n = len(Str)
#while loop to seperate the string into substrings
for Len in range(1,n + 1):
   for i in range(n - Len + 1):
      j = i + Len - 1
      for k in range(i,j + 1):
          #printing all the substrings
          print(Str[k],end="")

这会让我着迷:

abcabbcabc

具有所有正确的子字符串但未分隔。我该怎么做才能得到我想要的输出?我认为end='' 可以将每个子字符串分成每个单独的行,但事实并非如此。有什么建议吗?

【问题讨论】:

标签: python python-3.x


【解决方案1】:

您可以在i 循环中添加一个额外的print(),但改用slice 会更容易:

s = "abc"
n = len(s)
for size in range(1, n+1):
    for start in range(n-size+1):
        stop = start + size
        print(s[start:stop])

输出:

a
b
c
ab
bc
abc

另一方面,如果您希望它们在您所写时按字面意思加入逗号空格,最简单的方法是将它们保存在一个列表中,然后在最后加入。

s = "abc"
n = len(s)
L = []
for size in range(1, n+1):
    for start in range(n-size+1):
        stop = start + size
        L.append(s[start:stop])
print(*L, sep=', ')

或者,我可能会为此使用list comprehension

s = "abc"
n = len(s)
L = [s[j:j+i] for i in range(1, n+1) for j in range(n-i+1)]
print(*L, sep=', ')

输出:

a, b, c, ab, bc, abc

【讨论】:

    【解决方案2】:

    更pythonic的解决方案

    代码:

    import itertools
    s = "abc"
    for i in range(1,len(s)+1):
        print(["".join(word) for word in list(itertools.combinations(s,i))])
    

    结果:

    ['a', 'b', 'c']
    ['ab', 'ac', 'bc']
    ['abc']
    

    【讨论】:

    • OP 正在寻找 chunks,而不是组合,所以 'ac' 不应该在那里。
    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 2021-12-01
    • 1970-01-01
    • 2023-01-07
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多