必要に応じて、すべての行をリストに入れ、リストでlines = open(thefile).readlines()
作業することができます-最大限に効率的ではありませんが、最大限に単純です。
繰り返しますが、最も簡単な方法は、条件ごとに 1 つずつ、複数のループを実行することです (ただし、違反する可能性のある条件ではない 2 つと、実際には条件ではない 5 つを除きます;-)。「a で始まるすべての行は、b で始まる行の前になければならない」は、「a で始まる最後の行があれば、b で始まる最初の行の前になければならない」と考えることができます。
lastwitha = max((i for i, line in enumerate(lines)
if line.startswith('a')), -1)
firstwithb = next((i for i, line in enumerate(lines)
if line.startswith('b')), len(lines))
if lastwitha > firstwithb: raise Error
次に、「整数を含む行」についても同様です。
firstwithint = next((i for i, line in enumerate(lines)
if any(c in line for c in '0123456789')), len(lines))
if firstwithint < firstwithb: raise Error
これは本当に宿題のヒントになるはずです。最後の残りの部分、条件 4 を自分でできますか?
もちろん、私がここで提案していることとは異なる方法を取ることができます (条件を満たす行の最初の番号を取得するために使用しnext
ます。これには Python 2.6 が必要です) any
。all
条件)しかし、私は最大限のシンプルさのためにあなたの要求に合わせようとしています. 従来のfor
ループがnext
、any
およびよりも単純であるall
ことがわかった場合はお知らせください。これらの高度な抽象化形式の使用を下位層の概念に再コード化する方法を示します。