2017-11-13 4 views
2
lst = 'AB[CD]EF[GH]' 

出力:[ 'A'、 'B'、 'C​​D'、 'E'、 'F'、 'GH']文字列をループして特定の項目を印刷するにはどうすればよいですか?

これは私が試したものですが、それは働いていません...

while(index < len(my_string)): 
curr_char = my_string[index] 
if(curr_char == '['): 
     while(curr_char != ']'): 
      multi = my_string[index + 1] 
      index += 1 
lst += multi 

誰でもお手伝いできますか? Regexなどをインポートせずに。私はそれを使わずにこれをやりたい

+1

私はこれが重複しているとは思わない:明らかに無限ループがある。ステートマシンが必要で、何を問わずインデックスをインクリメントする必要があります。 –

+0

を再開すると、なぜ機能していないのかを編集する必要がありますが、 –

+0

答えがあります:https://stackoverflow.com/questions/47169994/why-did-my-loop-stop-iterating仕事をしてもOPの質問は異なります:仕事をする正規表現はありません。 –

答えて

1

リストで文字列を連結することはできませんので、あなたは

lst += multi 

を使用することはできません。

また、内部ループ内の変数curr_charを更新していないため、コードが無限ループに入るため、条件は常にTrueになります。

また、curr_char != '['の場合は対処していません。さらに多くのエラーがあります。

あなたはあなたのコードと同じ基本的なロジックを使用しながら、上記のエラーを修正し、このコードを使用することができます:

index = 0 
multi = "" 
res = [] 
my_str = 'AB[CD]EF[GH]' 

while (index < len(my_str)): 
    curr_char = my_str[index] 
    if curr_char == '[': 
     multi += curr_char 
     while curr_char != ']': 
      index += 1 
      curr_char = my_str[index] 
      multi += curr_char 
     res.append(multi) 
     multi = "" 
    else: 
     res.append(curr_char) 
    index += 1 

print(res) 

出力:

['A', 'B', '[CD]', 'E', 'F', '[GH]'] 
2

元のコードに問題があることに見えました。

1)インデックス、インデックスおよびマルチが初期化されていない

2)番目loop変数(index)が各反復で増分されないため、eループは無限大です。

3)最終的なリスト

このコードでそれを含めて回避するために、検出されたときに閉じ括弧をスキップする必要はそれらの問題を解決する方法の例です:

def getList(s): 
    outList=[] 
    lIndex=0 
    while lIndex < len(s): 
     if s[lIndex] == "[": 
      letters="" 
      lIndex+=1 
      while s[lIndex] != "]": 
       letters+=s[lIndex] 
       lIndex+=1 
      outList.append(letters) 
     else: 
      outList.append(s[lIndex]) 
     lIndex+=1 
    return outList 

print(getList('AB[CD]EF[GH]')) 
+0

回答としてダンプコードが十分ではありません。あなたはなぜOPコードが動作していなかったのか、あなたのコードがどのように動作するのかを説明する必要があります –

+0

フィードバックに感謝 - OPコードの問題点は次のとおりです:1)インデックスとマルチは初期化されていません2)変数(インデックス)は各反復でインクリメントされません。 3)最後のリストにそれが含まれないようにするために、最後の括弧をスキップする必要があります。 –

+0

あなたの答えは良く聞こえます。コメントはそのために設計されていません。 –

0

次のことを試してみてくださいコードスニペット。

my_string = 'AB[CD]EF[GH]' 

lst = [] 
ind = 0 
n = len(my_string) 

while (ind < n): 
    if my_string[ind] == '[': 
     # if '[' is found, look for the next ']' but ind should not exceed n. 
     # Your code does not do a ind < n check. It may enter an infinite loop. 
     ind += 1 # this is done to skip the '[' in result list 
     temp = '' # create a temporary string to store chars inside '[]' 
     while ind < n and my_string[ind] != ']': 
      temp = temp + my_string[ind] 
      ind+=1 
     lst.append(temp) # add this temp string to list 
     ind += 1 # do this to skip the ending ']'. 
    else: 
     # If its not '[', simply append char to list. 
     lst.append(my_string[ind]) 
     ind += 1 

print(lst) 
関連する問題