156 votes

"for loop" avec deux variables ?

Comment puis-je inclure deux variables dans le même for boucle ?

t1 = [a list of integers, strings and lists]
t2 = [another list of integers, strings and lists]

def f(t):  #a function that will read lists "t1" and "t2" and return all elements that are identical
    for i in range(len(t1)) and for j in range(len(t2)):
        ...

8voto

Open-Business Points 79

"Python 3."

Ajouter 2 variables avec une boucle for utilisant zip et range ; Retourner une liste.

Note : Ne fonctionnera que jusqu'à la fin de la plus petite gamme.

>>>a=[g+h for g,h in zip(range(10), range(10))]
>>>a
>>>[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

6voto

Daniel Points 1514

Pour votre cas d'utilisation, il peut être plus facile d'utiliser un fichier de type while boucle.

t1 = [137, 42]
t2 = ["Hello", "world"]

i = 0
j = 0
while i < len(t1) and j < len(t2):
    print t1[i], t2[j]
    i += 1
    j += 1

# 137 Hello
# 42 world

Il faut savoir que cette approche sera tronquée à la longueur de votre liste la plus courte.

3voto

dawg Points 26051

Je pense que vous cherchez des boucles imbriquées.

Exemple (basé sur votre montage) :

t1=[1,2,'Hello',(1,2),999,1.23]
t2=[1,'Hello',(1,2),999]

t3=[]

for it1, e1 in enumerate(t1):
    for it2, e2 in enumerate(t2):
        if e1==e2:
            t3.append((it1,it2,e1))

# t3=[(0, 0, 1), (2, 1, 'Hello'), (3, 2, (1, 2)), (4, 3, 999)]

Qui peut être réduit à une seule compréhension :

[(it1,it2,e1) for it1, e1 in enumerate(t1) for it2, e2 in enumerate(t2) if e1==e2] 

Mais pour trouver les éléments communs, il suffit de faire :

print set(t1) & set(t2)
# set([(1, 2), 1, 'Hello', 999])

Si votre liste contient des objets non hachables (comme d'autres listes, des dicts), utilisez un ensemble figé :

from collections import Iterable
s1=set(frozenset(e1) if isinstance(e1,Iterable) else e1 for e1 in t1)
s2=set(frozenset(e2) if isinstance(e2,Iterable) else e2 for e2 in t2)
print s1 & s2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X