将字符串分成连续的子串?

时间:2017-05-18 16:25:28

标签: python string

我有一个字符串" BANANA"。我想生成所有可能的连续子串的列表:

[B,BA,BAN,BANA,BANAN,BANANA,A,AN,ANA,...]

这是我可以使用Python List Comprehension完成的事情,还是我只是以暴力方式生成它们?注意:我是Python的新手。 TIA

3 个答案:

答案 0 :(得分:2)

使用列表理解:

s = "BANANA"
l = len(s)
ar = [s[j:] for i in range(l) for j in range(i,l)]
print(*ar)

使用嵌套循环:

s = "BANANA"
l = len(s)
ar = []
for i in range(l):
    for j in range(i,l):
        ar.append(s[j:])
print(*ar)

两个输出:

BANANA ANANA NANA ANA NA A ANANA NANA ANA NA A NANA ANA NA A ANA NA A NA A A

N.B。:itertools已在A.J。答案中解释过。

答案 1 :(得分:1)

使用itertools

尝试以下操作
str = "BANANA"
all = [[''.join(j) for j in itertools.product(str, repeat=i)] for i in range(1, len(str)+1)]
>>> all[0]
['B', 'A', 'N', 'A', 'N', 'A']
>>> all[1]
['BB', 'BA', 'BN', 'BA', 'BN', 'BA', 'AB', 'AA', 'AN', 'AA', 'AN', 'AA', 'NB', 'NA', 'NN', 'NA', 'NN', 'NA', 'AB', 'AA', 'AN', 'AA', 'AN', 'AA', 'NB', 'NA', 'NN', 'NA', 'NN', 'NA', 'AB', 'AA', 'AN', 'AA', 'AN', 'AA']
>>> 

答案 2 :(得分:1)

如果你想要所有的posible子列表,你可以在一个列表理解中使用两个:

def sublists(lst):
    return [lst[m:n+1] for m in range(0,len(lst)+1) for n in range(m,len(lst)+1)]

  sublists("banana")
=> ['b', 'ba', 'ban', 'bana', 'banan', 'banana', 'banana', 'a', 'an', 'ana', 'anan', 'anana', 'anana', 'n', 'na', 'nan', 'nana', 'nana', 'a', 'an', 'ana', 'ana', 'n', 'na', 'na', 'a', 'a', '']

如果你不想要重复的元素:

def sublistsWithoutRepeated(lst):
  return list(set(sublists(lst)))

  sublistsWithoutRepeated("banana")
=> ['a', '', 'b', 'ba', 'nana', 'na', 'nan', 'an', 'anana', 'anan', 'n', 'bana', 'ban', 'banan', 'banana', 'ana']