![](/img/trans.png)
[英]Python - How to decrease big O and increase efficiency in multiple nested for loops?
[英]Increase efficiency of nested for loops
因此,我正在遍歷一些JSON數據,這很慢,因為我正在使用嵌套的for循環。
我的代碼如下:
import requests
import json
pokemon_url = 'https://pokeapi.co/api/v2/pokemon/bulbasaur/'
pokemon_move_url = 'https://pokeapi.co/api/v2/move/pound/'
pokemon_info = requests.get(pokemon_url)
pokemon_data = pokemon_info.text
pokemon_parsed = json.loads(pokemon_data)
name = pokemon_parsed['forms'][0]['name']
for move in pokemon_parsed['moves']:
for method in move['version_group_details']:
if method['version_group']['name'] == 'sun-moon' and method['move_learn_method']['name'] == 'level-up':
pokemon_move_url = 'https://pokeapi.co/api/v2/move/'+move['move']['name']
pokemon_move = requests.get(pokemon_move_url)
pokemon_move_text = pokemon_move.text
pokemon_parsed_moves = json.loads(pokemon_move_text)
print(method['move_learn_method']['name'],move['move']['name'],method['level_learned_at'],pokemon_parsed_moves['type']['name'],pokemon_parsed_moves['power'],pokemon_parsed_moves['accuracy'])
我想知道如何才能更有效,更好地做到這一點。 我知道有更好的方法,但是我剛開始使用Python,所以我還在學習。
正如Sergio所提到的,http請求可能比for循環慢,但是當您有大量迭代時,for循環會降低速度。 您可以嘗試使用列表理解來構建網址列表,然后執行請求:對於內循環的第一行,它將是:
pokemon_move_url = ['https://pokeapi.co/api/v2/move/'+move['move']['name'] for move in pokemon_parsed['moves'] for method in move['version_group_details'] if method['version_group']['name'] == 'sun-moon' and method['move_learn_method']['name'] == 'level-up']
pokemon_move = [requests.get(url) for url in pokemon_move_url]
pokemon_move_text = [move.text for move in pokemon_move]
pokemon_parsed_moves = [json.loads(text) for text in pokemon_move_text]
這應該比使用for循環快得多(當然,這取決於for循環或請求是否是瓶頸)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.