2017-06-09 7 views
0

私はPythonプログラミングには新しく、ペットプロジェクトに取り組んで私の手を汚しています。PythonはネストされたForループを避ける

私はこれらのネストされたループを回避するために多くの試みを行いましたが、成功しませんでした。

Avoiding nested for loops

Returns values from a for loop in python

import requests 
import json 

r = requests.get('https://api.coinmarketcap.com/v1/ticker/') 
j = r.json() 


for item in j: 
    item['id'] 
    n = item['id'] 
    url = 'https://api.coinmarketcap.com/v1/ticker/%s' %n 
    req = requests.get(url) 
    js = req.json() 
    for cool in js: 
     print n 
     print cool['rank'] 

より多くの情報が必要な場合は私に知らせてください。

+3

時々、ネストされたforループが必要です。これはその時のようです。 – bernie

+0

私は多くのデータを取得しており、forループをネストしていると時間がかかりすぎます。(私はあなたの意見を理解しています。 – Master

+0

ネストされたループの作成を避けるために、内部forループを含む 'js'を解析する関数を作成することができます。これには技術的にネストされたループが含まれていますが、コードは少なくともフラットに見えることに注意してください。 –

答えて

0

あなたの最初のリクエストで、必要なものがすべて手に入ります。

import requests 
import json 

response = requests.get('https://api.coinmarketcap.com/v1/ticker/') 
coin_data = response.json() 

for coin in coin_data: 
    print coin['id'] # "bitcoin", "ethereum", ... 
    print coin['rank'] # "1", "2", ... 
    print coin['price_usd'] # "2834.75", "276.495", ... 
+0

敬意。応答を感謝します。 – Master

0

質問

私はループにあまりにも多くのループを持っているとはい、ループ・インをクリーンアップするのpythonの方法がある

回答

それをクリーンアップするのpython方法をしたいですループをより見栄えのいいものにするためには、ループ内のループがまだ存在します。

import requests 
import json 

r = requests.get('https://api.coinmarketcap.com/v1/ticker/') 
j = r.json() 

id_list = [item['id'] for item in j] 

for n in id_list: 
    url = 'https://api.coinmarketcap.com/v1/ticker/%s' %n 
    req = requests.get(url) 
    js = req.json() 
    print "\n".join([ n+"\n"+item['rank'] for item in js ]) 

洞察この特定のコードを実行した後、この

を実行しているから、私はあなたが実際に最初の

r = requests.get('https://api.coinmarketcap.com/v1/ticker/') 

を使用して、ランクの順にティッカーのリストを取得していることを認識し、使用してください

url = 'https://api.coinmarketcap.com/v1/ticker/%s' %n 
ランクを取得するには

何場合:https://api.coinmarketcap.com/v1/ticker/は、あなたがそう

import requests 
import json 

r = requests.get('https://api.coinmarketcap.com/v1/ticker/') 
j = r.json() 

id_list = [item['id'] for item in j] 

result = zip(id_list,range(1,len(id_list)+1)) 

for item in result : 
print item[0] 
print item[1] 

回答添加の質問

追加の質問のようなあなたのコードを簡素化することができ、ランクの順にアイテムを返すように続けている

限りもう一つのパラメータがprice_usdと言いたいですか? ..... JSで涼しいため:

[ 'price_usd'] [ 'ランク']印刷クールクール印刷するn個のプリント回答:へ

変更ライン

print "\n".join([ n+"\n"+item['rank'] for item in js ]) 

print "\n".join([ n+"\n"+item['rank']+"\n"+cool['price_usd'] for item in js ]) 
+0

もう1つのパラメータ、price_usdが必要な場合はどうすればよいですか? .....クールインjs: print cool ['price_usd'] – Master

+0

回答を追加して回答を更新しました。 – Wontonimo

+0

入力に感謝し、コードを書くためのpythonic方法を説明してください:) – Master

関連する問題