2017-07-19 10 views
1

私は次のようなループを持っています:forループとifです。私はPythonのリストの理解を使用して1行のコードに変更したいと思います。しかし、なぜそれが動作しないのか分かりません。if文を指す '^'の構文エラーがあります。ifとforループでのリストの理解

元:私はちょうどPythonの機能の一つであると言われているリスト内包の方法論を使用していた

lines = [[lines[i][0:(lines[i].find('(')-1)]] for (i in range(len(lines))) if ((lines[i].find('('))!=-1)] 

for i in range(len(lines)): 
     if (lines[i].find('('))!=-1: 
      lines[i] = lines[i][0:(lines[i].find('(')-1)] 

に変更しました。私はプログラミングの経験がないので、何か新しいことを学ぶことを望みます。助けてくれてありがとう、お友達!

+1

ます – DyZ

+1

最初に、 '(i in range(len(lines)))'のまわりのかっこを取り除くことができます。 ... –

+0

基本的には、これにプレーンループを使用して、おそらく 'lines [i] .find( '( ') 'を繰り返す代わりに、非常に非効率的です。あなたのコードを読むことができないようにする(あなたが急速に近づいている)か、あなたが非効率になるように強制するなら、それらを使用しないでください。 –

答えて

0

あなたが(少しクリーナーに見える)以下を試すことができます。

[lines[i][0:lines[i].index('(')-1] if '(' in lines[i] else lines[i] for i in range(len(lines))] 

だから、それはdo trimming if (is in the line else leave as it is for each lineを言います。

0

括弧が多すぎます。 これを試して、動作するかどうかを確認してください。

lines = [lines[i][0:lines[i].find('(')-1] for i in range(len(lines)) if lines[i].find('(')!=-1] 
0

あなたの変更のコードは、この

apply = lambda line: line[0:line.index('(') - 1] 
lines = [apply(line) for line in lines if '(' in line] 

のように置き換えることができ、単一のラインによる書き込みコードはクールのように見えるかもしれないが、それは読みません。

も、上記のコードは、この

lines = [line[0:line.index('(') - 1] for line in lines if '(' in line] 

のような一行を書くことができますが、それは読みにくくです。

あなたの変更されたコードはオリジナルとまったく同じではありません。元のコードで 行「(」持っていない文字列が含まれているが、変更されたコードの行にのみ適用さ行が含まれています。

1

あなたがrange()をドロップし、.split()の代わり.find()を使用する場合でも短い行くことができます。

lines = [line.split('(')[0] for line in lines] 
関連する問題