文字列を読み込もうとしています(空白なし)、大文字の小文字が両側に3つの大文字(HHSkSIO)で囲まれたインスタンスを引き出します。各ウィンドウ内の文字があるかどうかを最初の関数ウィンドウは声明のため、私は7のスライディングウィンドウと第二の部分を使用して文字列を反復処理することができますforループ内でネストされたifステートメントを使用しています
def window(fseq, window_size=7):
for i in xrange(len(fseq) - window_size + 1):
yield fseq[i:i+window_size]
for seq in window('asjdjdfkjdhfkdjhsdfkjsdHJJnJSSsdjkdsad', 7):
if seq[0].isupper and seq[1].isupper and seq[2].isupper and seq[3].islower and seq[4].isupper and seq[5].isupper and seq[6].isupper:
print seq
、チェック:私は以下のコードを書いていますより高い、より高い、より高い、より高い、高い。私は、コードを実行すると、それがで出てくる:
asjdjdf
sjdjdfk
jdjdfkj
djdfkjd
jdfkjdh
dfkjdhf
fkjdhfk
kjdhfkd
jdhfkdj
dhfkdjh
hfkdjhs
fkdjhsd
kdjhsdf
djhsdfk
jhsdfkj
hsdfkjs
sdfkjsd
dfkjsdH
fkjsdHJ
kjsdHJJ
jsdHJJn
sdHJJnJ
dHJJnJs
HJJnJsd
JJnJsdj
JnJsdjk
nJsdjkd
Jsdjkds
sdjkdsa
djkdsad
どのように私は、ステートメントif文ではなく、それらのすべてをプリントアウトするよりも、上記に準拠スライディング窓の外だけ印刷のために作ることができますか? P.S私はこれがおそらくそれを行うの非常にclunkyな方法であることを知って、私は初心者であり、私が考えることができる唯一のものでした!
'配列[0] .isupper'、残りは実際の関数を呼び出すことはありません。メソッドオブジェクトは "真実"なので、条件は常にTrueです。文字列中の全ての文字が大文字であれば、 'str.isupper'が' True'を返すという事実を利用することもできます。 –
ああ、そうです:もしseq [0] == Trueなら? – sahwahn
いいえ、メソッドを呼び出す必要があります。たとえば、 'seq [:3] .isupper()'は最初の2文字が大文字であるかどうかを調べます。一般的に、Pythonでは 'something == True'を決して実行しません。単に何かをテストするだけです。 –