は、文字が、私が反復処理し、ちょうど'#'
Pythonジェネレータから抜け出すことはできますか?
'#'
になるまで、私はを巡回したいとだけ最初の数文字を取得するには、次の文字列
long_string = '#' * 4 + 'a' * 10 + '#' * 4
print(long_string)
####aaaaaaaaaa####
を考えてみましょう
''.join(x for x in long_string if x.startswith('#'))
'########'
これは多すぎます。
私はそれを破るするための条件に遭遇したとき、これは、反復処理を停止この
def gen_break(long_string, mychar):
i = iter(long_string)
s = next(i)
while s == mychar:
yield s
s = next(i)
''.join(gen_break(long_string, '#'))
'####'
のような何かをしたいです。 (this for this in that)
の構文の中でこれをもっとうまくやり遂げる方法はありますか?
注:
これは私が求めています質問を強調するために、不自然な例でした。私はこのサンプル文字列を解析する方法を探していません。私は、好ましくは理解の構文を使用して、エレガントな方法で反復を打破する方法を探しています。これはその後、生成
from itertools import takewhile
''.join(takewhile(lambda x:x == '#','#### foo bar ### qux'))
:
genexpでは '中断 'できません。ただし、itertools.takewhileを使用することはできます。 – user2357112
[itertools.takewhile](https://docs.python.org/2/library/itertools.html#itertools.takewhile)は正確にこれを行います – Wondercricket
状況/発電機を故意に設定して、あなたが脱出したい点は? – toonarmycaptain