2017-11-08 13 views
1

私はこのコードを目的どおりに機能させることができましたが、なぜこの点については困惑しています。文字列からフレーズをリストに格納する

アイデアは、各行から情報を抽出することです(スペースや余分なタブ記号なしで)。

def extract_information(line: str) -> list: 

return [phrase.strip() for phrase in line.split(' ') if phrase] 

そして、それは動作します:

私が見つけたコードは以下の通りです!しかし、それは1ライナーなので、それを解読しようとするのは苦労しています。私は完全にループを書き出すために使用されました。

Ie. 

print(extract_information("Marni    FIGHTS FOR LIFE   Old Shack   Will rule the kingdom")) 

になる必要があります。

['Marni', 'FIGHTS FOR LIFE', 'Old Shack', 'Will rule the kingdom'] 

誰もがこのことについての手掛かりを持っていますか?

答えて

0

Pythonはリストの内包と呼ばれるものをサポートしています。

それは 句、または句の場合、ゼロ以上続く式を含むブラケットから成り

概要。式は なので、リストにすべての種類のオブジェクトを入れることができます。上記の式は、教育目的のためのみで、いずれにも有効でないことを

[return something for something in listofsomethings if something exists ] 

注:

したがって舞台裏

、あなたは上記の式をこのように読むことができます方法。

は、したがって、あなたの特定のケースで、これに翻訳することができます。

for phrase in line.split(' '): 
    if phrase: 
     phrase.strip() 

だから、あなたが見ることができるように、それはあなたがそれを行うことを期待するものを正確に行います。両方ともまったく同じことをしますが、リストの理解度は一般的にはもっと無愛想であると考えられます。

-2

それはリストの理解です。どのように動作するかを見るために、このような単純なものを実行してください。これは、基本的に、リストを簡潔な方法でループする方法です。

x=[1,2,3,4,5,6] 
y=[a*2 for a in x] 
+0

私はdownvoteをしませんでしたが、あなたの答えが実際にOPの疑問に対処していないことは明白です。彼らにはリストのcompが必要ですが、 '[a * 2 for a x] 。あなたが助けてくれると思うが、問題の長さに対処するつもりはないなら、コメントがより適しているだろう。 –

+0

彼はなぜ1つのライナーが動作するのか尋ねています。彼のコードを修正したり何かを解決しようとしているわけではなく、何が起こっているのかを彼に見せてもらうだけです。 – SuperStew

+0

うーん、確かに私は間違っていましたが、あなたの答えはまだコードが動作する理由を説明していません。ちょうどそれはリストcomprhensionを使用して...それ以上のものはありません。 –

関連する問題