Si vous voulez l'effet d'une boucle for imbriquée, utilisez :
import itertools
for i, j in itertools.product(range(x), range(y)):
# Stuff...
Si vous voulez juste boucler simultanément, utilisez :
for i, j in zip(range(x), range(y)):
# Stuff...
Notez que si x
y y
ne sont pas de la même longueur, zip
tronquera la liste la plus courte. Comme @abarnert l'a souligné, si vous ne voulez pas tronquer à la liste la plus courte, vous pouvez utiliser itertools.zip_longest
.
UPDATE
Sur la base de la demande d'une "fonction qui lira les listes "t1" et "t2" et retournera tous les éléments qui sont identiques", je ne pense pas que le PO veut zip
ou product
. Je pense qu'ils veulent un set
:
def equal_elements(t1, t2):
return list(set(t1).intersection(set(t2)))
# You could also do
# return list(set(t1) & set(t2))
Le site intersection
méthode d'un set
retournera tous les éléments communs à celui-ci et à un autre ensemble (Notez que si vos listes contiennent d'autres list
vous voudrez peut-être convertir l'élément interne list
s à tuples
d'abord pour qu'ils soient hachables ; sinon, l'appel à set
échouera). Le site list
transforme ensuite l'ensemble en une liste.
MISE À JOUR 2
OU, le PO peut vouloir des éléments qui sont identiques dans les domaines suivants la même position dans les listes . Dans ce cas, zip
serait le plus approprié, et le fait qu'il tronque à la liste la plus courte est ce que vous voudriez (puisqu'il est impossible qu'il y ait le même élément à l'indice 9 quand l'une des listes n'a que 5 éléments). Si c'est ce que vous voulez, optez pour cette solution :
def equal_elements(t1, t2):
return [x for x, y in zip(t1, t2) if x == y]
Cela renverra une liste contenant uniquement les éléments qui sont identiques et à la même position dans les listes.