6
votes

itérer les listes imbriquées de Python efficacement

Je travaille sur un projet de moniteur de trafic réseau dans Python. Pas si familier avec Python, alors je cherche de l'aide ici.

En bref, je vérifie la circulation de l'intérieur et de sortie, je l'ai écrit de cette façon: xxx

netdata est une liste composée de listes imbriquées, son format est comme celui-ci. : xxx

ici t représente le moment et f est le flux. Cependant, je veux juste garder ces F à ce moment-là pour les deux et dehors, je me demande un moyen de recevoir un code efficace.

Après une certaine recherche, je pense que je dois utiliser créer une liste de trafic ( 2 éléments), utilisez ensuite la fonction ZIP pour itérez les deux listes en même temps, mais j'ai de la difficulté à écrire un correct. Étant donné que mon Netdata est une très longue liste, l'efficacité est également très importante.

S'il y a quelque chose de déroutant, faites le moi savoir, je vais essayer de clarifier. Merci d'aide


0 commentaires

3 Réponses :


1
votes

Le code que vous avez montré n'a pas beaucoup de sens. Voici ce qu'il fait:

  • itéréter par la séquence 'in', 'out' , attribuant chacune de ces deux chaînes à son tour de la variable iTER (masquage de l'intégré Fonction iter () dans le processus) sur ses deux passes à travers la boucle.

  • Ignorez complètement la valeur de iTer à l'intérieur de la boucle.

  • Attribuer le résultat de myHTTP () à la variable netdata sur chaque passe à travers la boucle. < / li>

  • ignore complètement la valeur de netdata DATA sur chaque passage à travers la boucle.

    Il est possible, compte tenu de la liste imbriquée que vous décrivez, que vous voulez quelque chose comme ceci: xxx


0 commentaires

14
votes

Outre des corrections mineures de votre code (les problèmes soulevés par @zero Pirée), votre question a probablement reçu une réponse ici . Un code possible pour traverser une liste de listes en n diplôme (un arbre) est le suivant: xxx

exemple: xxx

la clé Pour que cela fonctionne, c'est une récursion et la clé pour le faire fonctionner efficacement utilise un générateur (le mot clé rendement donne l'indice). Le générateur ira déterrera via votre liste de répertais un retour à votre article par article, sans avoir à copier des données ni à créer une nouvelle liste (sauf si vous ne consommez l'ensemble du générateur attribuant le résultat à une liste, comme dans mon exemple)

Utilisation d'itérateurs et de générateurs peut être des concepts étranges à comprendre (le mot clé produire principalement). Checkout Ce Superbe réponse pour les comprendre complètement


0 commentaires

0
votes

Lorsque vous essayez l'une des autres réponses, la fonction n'a pas pu recourir, et je l'ai donc modifiée pour ne pas recueillir. Cela fonctionne toujours assez rapidement et peut gérer de grandes listes imbriquées (au moins autant que je puisse dire avec mes tests). C'est une fonction Python 3 uniquement. XXX


0 commentaires