2017-05-18 25 views
0

文字列「BANANA」があります。私はすべての可能なシーケンシャルのサブストリングのリストを生成したいと思います:文字列を連続する部分文字列に分割しますか?

[B、BA、BAN、BANA、バナン、BANANA、A、AN、ANA、...]

私は達成することができ、このものですPython List Comprehensionを使っているのですか?注:私はPythonが初めてです。 TIA

+1

とhttp://stackoverflow.com/questions/12945029 /部分文字列を使用するPython – abccd

+0

私の謝罪...私は適切なキーワードを探していませんでした。しかしdownvoteのおかげで。 – RobertJoseph

+1

ああ私はdownvoteしなかった、私がしたすべての重複が表示された、私は通常、重複をdownvoteしない – abccd

答えて

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

リスト内包使い方:

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

s = "BANANA" 
l = len(s) 
ar = [s[j:] for i in range(l) for j in range(i,l)] 
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、リスト内の理解のための2つを使用することができます。

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'] 
関連する問題