こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

締切り済みの質問

pythonコードについて

以下のpythonコードに関して質問があります。なぜ一度Falseになったatsplitがforループ内で再びTrueになるのでしょうか?以下にコードと結果を掲載しております。

def split_string(source,splitlist):
output = []
atsplit = True
for char in source:
   if char in splitlist:
     atsplit = True
     print atsplit
   else:
      if atsplit:
         output.append(char)
         atsplit = False
         print atsplit
      else:
         output[-1] = char
return output

out = split_string("This is a test-of the,string separation-code!"," ,!-")
print out
#>>> ['This', 'is', 'a', 'test', 'of', 'the', 'string', 'separation', 'code']

False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
['This', 'is', 'a', 'test', 'of', 'the', 'string', 'separation', 'code']tsplit = True

投稿日時 - 2016-01-06 23:55:55

QNo.9107343

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

ANo.1

for char in source:
sourceの先頭から一文字づつ取り出してcharに代入し、末尾までループします。

if char in splitlist:
取り出した文字列がsplitlistに含まれているかによって分岐します。

splitlistに含まれている場合
atsplit をTrueにします
atsplitを出力します(True表示)

splitlistに含まれていない場合
atsplitがTrueならoutputに新しい要素を追加し、atsplitをFalseにしてatsplitを出力します(False表示)
atsplitがFalseならoutputの末尾にcharを追加します

なので、splitlistに含まれている文字が見つかるたびにatsplitはTrueになります。
この説明でわかるでしょうか?
ポイントはfor文でループするたびにcharが次の文字に変わるというところです。

投稿日時 - 2016-01-07 08:50:03

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-