簡體   English   中英

提高嵌套for循環的效率

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM