web-dev-qa-db-fra.com

Liste de compréhension itération sur deux listes ne fonctionne pas comme prévu

Je veux itérus sur deux listes. La première liste contient des agents utilisateur du navigateur et la deuxième liste contient des versions de ces navigateurs. Je veux filtrer uniquement les agents utilisateur dont la version est supérieure à 60.

Voici comment la compréhension de ma liste regarde:

[link for ver in version for link in useragents if ver > 60]

Le problème avec cette liste est qu'il imprime le même utilisateur utilisateur plusieurs fois. J'ai écrit ce qui suit à l'aide de la fonction Zip, qui fonctionne bien:

for link, ver in Zip(useragents, version):
    if ver > 60:
        # append to list
        print(link)

Pourquoi ma liste de compréhension de ma liste renvoie-t-elle des résultats inattendus?

15
Viktor

Vous ne pouvez pas être sûr sur ce qui se passe, sans vos données, mais en général, la compréhension de la liste "double" n'est pas la même que Zip, mais plutôt une double boucle, c'est-à-dire.

[a for b in bs for a in as]

est équivalent à

for b in bs:
    for a in as:
        lst.append(a)
1
Slam