2016-11-28 7 views
0

のために1が並ぶこのよう を「1並び」:Pythonの私はループのためにこれを作るための方法を探していたループ

print([k for k in ["hello", "hi", "bye"]]) 

は、このループのためである:基本的に

for idx, item in enumerate(base["paths"]): 
      print(base["paths"][idx]["path"]) 

私は、フォルダ/ファイルパス、タイプ、およびmd5チェックサムのリストを持つJSONを持っています。 それは次のようになります。

{ 
    "paths": [ 
     { 
      "md5": "None", 
      "path": "shared/", 
      "type": "folder" 
     }, 
     { 
      "md5": "01d5c39c19f6b334145315672cf70f6b", 
      "path": "shared/memes.txt", 
      "type": "file" 
     }, 
     { 
      "md5": "2c04a7ccefc2596b726646f30b557921", 
      "path": "shared/plan.txt", 
      "type": "file" 
     }, 
     { 
      "md5": "None", 
      "path": "shared/downloads", 
      "type": "folder" 
     }, 
     { 
      "md5": "None", 
      "path": "shared/downloads/linux", 
      "type": "folder" 
     }, 
     { 
      "md5": "d41d8cd98f00b204e9800998ecf8427e", 
      "path": "shared/downloads/linux/setup.txt", 
      "type": "file" 
     }, 
     { 
      "md5": "None", 
      "path": "shared/downloads/linux/boot", 
      "type": "folder" 
     }, 
     { 
      "md5": "b36694d5b1ab1b2e96f197f62bb76459", 
      "path": "shared/downloads/linux/boot/boot.txt", 
      "type": "file" 
     }, 
     { 
      "md5": "None", 
      "path": "shared/downloads/steam", 
      "type": "folder" 
     }, 
     { 
      "md5": "d41d8cd98f00b204e9800998ecf8427e", 
      "path": "shared/downloads/steam/csgo.txt", 
      "type": "file" 
     }, 
     { 
      "md5": "None", 
      "path": "shared/games", 
      "type": "folder" 
     }, 
     { 
      "md5": "None", 
      "path": "shared/games/pixel", 
      "type": "folder" 
     }, 
     { 
      "md5": "d41d8cd98f00b204e9800998ecf8427e", 
      "path": "shared/games/pixel/pixel.txt", 
      "type": "file" 
     }, 
     { 
      "md5": "None", 
      "path": "shared/games/pixel/data", 
      "type": "folder" 
     }, 
     { 
      "md5": "d41d8cd98f00b204e9800998ecf8427e", 
      "path": "shared/games/pixel/data/lib.txt", 
      "type": "file" 
     }, 
     { 
      "md5": "None", 
      "path": "shared/music", 
      "type": "folder" 
     }, 
     { 
      "md5": "d41d8cd98f00b204e9800998ecf8427e", 
      "path": "shared/music/some other new awesome music.txt", 
      "type": "file" 
     }, 
     { 
      "md5": "None", 
      "path": "shared/New folder", 
      "type": "folder" 
     } 
    ] 
} 

私は何をしたいことのすべて「パス」のリストを作成していると私はトリックを行うだろうループの1行を使用して、考え出したが、私は知りませんどうやってするの。

私はこの種のものに熟練していないので、それが何であるか分かりません。そのため、私はそれについての研究や適切なタイトルをつけることができません。 それを私に許してください。

ありがとうございます!

+1

'印刷(」 \ n '.join(ベース["paths"] [idx] ["path"] idx、列挙する項目(ベース["paths"]))) ' – AChampion

+1

この1行を作るのに本当に利点はありますか? –

+1

@AdamHughes「フラットはネストされたものより優れています」、明らかに! – Brian

答えて

2

全く同じリスト理解術をすることができない理由はありません。 :

for k in ["hello", "hi", "bye"]]): 
    print(k) 

は、私はあなたが無駄にしていることを指摘しなければならないが、そう

for idx, item in enumerate(base["paths"]): 
     print(base["paths"][idx]["path"]) 

が...

[ base["paths"][idx]["path"] for idx, item in enumerate(base["paths"]) ] 

にあり、

[ k for k in ["hello", "hi", "bye"] ] 

にあります経済と明快なプロの可能性現在使用されていない変数itemが表示されます。あなたはそれを活用する場合は、あなたの(?単純化)の例では、idxは、あなたが完全にenumerateを取り除く意味し、未使用になります:

for item in base["paths"]: 
    print(item["path"]) 

と同様に:明らか

[ item["path"] for item in base["paths"] ] 

[結果のリストで何でもしてください。それを変数に代入して、print()(質問のように)に直接渡してください。]

+0

これを短縮するには、 'item 'idx'の代わりに' idx'の '' item ["path"]、列挙する項目(base ["paths"])] ' –

+0

' 'enumerate()'は不要です: '[item –

+0

私の2つの編集は、それぞれのコメントの後ろに約7秒遅れていましたか? – jez

0

@ jezの答えは、ループを理解しやすくするためのほとんどの状況をカバーします。しかし、ループに直接printを貼り付ける問題は、それがNoneを返すということです。あなたが使用できる解決法がいくつかあります。

print('\n'.join(item["path"] for item in base["paths"])) 

str.joinは、すべての要素を連結します:@AChampionが最初のコメントで示唆するよう

  • 最良の方法は、代わりに他の方法で回避のprint文にループを固執することですセパレータとして呼び出された文字列を使用して、文字列を反復可能にします。この場合、「base["paths"]の各要素の間に改行を置き、その結果を出力します。あなたが1行にシングルの文forループを置くことを許可されている

    for item in base["paths"]: print(item["path"]) 
    

  • 最も簡単な方法はチートです。 ifelsewhiledefなどと同じです。これは一般的には良い方法ではありませんが、コマンドラインですばやく入力すると便利です。

  • あり、使用できる別の方法は、実際にあるが、それはそれはリストの内包として直接ループを書き換えるためにどの、おそらくもっと間違っ秒以下である:

    [print(item["path"]) for item in base["paths"]] 
    

    これは、作成および破棄します同じ長さのNone要素のリストはとなります。printNoneを返します。 joinを使用した場合の唯一の可能な利点は、印刷用の完全な中間文字列を作成しないことです。

TL; DR

使用forループ。

0

maplambdaで行うことができます:

map((lambda x: print(x["path"])), base["paths"]) 

のPython 3とこれだけの仕事を、Pythonの2.xのprintに声明ない機能であるため、(What’s New In Python 3.0を参照)

関連する問題