Alors maintenant, j'ai 2 listes,
for x in range(len(list1)): for y in range(1, len(list2)+1): if(list1[x][1] == list2[y]): result = [y, list2[y][0]] fstore.append(result)
Je veux comparer le tout 2ème élément de list1 et s'il existe dans list2, imprimer la liste correspondante. donc le résultat que je veux est quelque chose comme ceci:
[[1, 'miniwok'],[2, 'chicken'],[10,'pizza']]
J'ai essayé d'utiliser la boucle for imbriquée mais je pense que je fais quelque chose de mal
list1 = [[0,1],[0,2],[0,10]] list2 = [[1, ['miniwok', 'food1']], [2,['chicken', 'food2']], [3,['duck', 'food3']], ..... , [10, ['pizza', 'food10']]]
3 Réponses :
Vous pouvez convertir list2
en dictionnaire pour une recherche plus rapide:
[[1, 'miniwok'], [2, 'chicken'], [10, 'pizza']]
Résultat:
list1 = [[0,1],[0,2],[0,10]] list2 = [[1, ['miniwok', 'food1']], [2,['chicken', 'food2']], [3,['duck', 'food3']], [10, ['pizza', 'food10']]] new_l2 = dict(list2) result = [[b, k[a]] for a, b in list1 if (k := new_l2.get(b)) is not None]
Il convient de mentionner que l'opérateur : =
est nouveau depuis python 3.8
.
Vous pouvez faire:
list1 = [[0,1],[0,2],[0,10]] list2 = [[1, ['miniwok', 'food1']], [2,['chicken', 'food2']], [3,['duck', 'food3']],... , [10, ['pizza', 'food10']]] numbers = [number[1] for number in list1] [(item[0], item[1][0]) for item in list2 if item[0] in numbers]
Sortie:
[(1, 'miniwok'), (2, 'chicken'), (10, 'pizza')]
Bien sûr, le "()" dans la compréhension de liste qui crée une liste de tuples peut être changé avec "[]" pour créer une liste de listes, si préférez.
Votre code a rencontré des problèmes pour accéder aux valeurs via l'indexation et vous n'avez pas attribué à fstore une liste vide avant de l'utiliser.
La version corrigée de votre réponse est ici-
[[1, 'miniwok'], [2, 'chicken'], [10, 'pizza']]
Est-il possible de modifier le code qui génère ces listes pour utiliser des dictionnaires, qui seront à la fois plus performants (accédant à l'élément "aléatoire" avec O (1)), et plus simple à utiliser? Cela suppose que vos clés (2e entiers) sont uniques.