【问题标题】:Python Avoid Nested For LoopPython 避免嵌套 For 循环
【发布时间】:2017-11-11 17:44:25
【问题描述】:

我是 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']

如果需要更多信息,请告诉我。

【问题讨论】:

  • 有时你需要嵌套 for 循环。这看起来像是其中之一。
  • 我得到了很多数据,嵌套 for 循环太费时了 :( 不过我明白你的意思。谢谢你的反馈。
  • 为避免编写嵌套循环,您可以创建一个函数来解析包含内部 for 循环的 js。请注意,这在技术上仍会包含嵌套循环,但您的代码至少会显得更扁平。
  • @Master 摆脱嵌套 for 循环的原因通常是为了使其更具可读性或更易于维护。它很少会提高速度。
  • @Master 您是否重复请求相同的url?看起来减少复杂性/时间的唯一方法是减少请求的数量。如果每个请求都是唯一的,我不确定您是如何做到的。

标签: python loops for-loop nested


【解决方案1】:

问题

我在循环中有太多循环,想要一种 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,该怎么办? ..... for cool in js: print n print cool['rank'] print cool['price_usd']

回答

换行

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 ])

【讨论】:

  • 如果我想要多一个参数比如 price_usd 怎么办? ..... for cool in js: print cool['price_usd']
  • 我更新了回复以获得额外的答案。
  • 感谢您的输入并解释了编写代码的pythonic方式:)
  • 不要说谢谢,只是点赞和/或接受答案。干杯
  • 好吧,我不能投票,因为我的声誉太低了。此外,Jared Goguen 的回复为我节省了很多执行时间 :) 但是,我感谢您为帮助我做出的努力。
【解决方案2】:

您的第一个请求已经为您提供所需的一切。

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", ...

【讨论】:

  • 尊重。感谢您的回复。
猜你喜欢
  • 2017-08-27
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 2019-12-26
  • 2017-09-20
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多