J'ai un programme qui génère deux listes. Je souhaite imprimer un élément de la liste 1, puis passer à l'impression d'un élément de la liste 2, puis revenir à l'impression de la liste 1 ..etc. Cependant, chaque fois que je l'essaye, il imprime simplement list1 puis list2.

Veuillez aider.

Code:

List1 = ['a', 'b' , 'c', 'd', 'e', 'f']

List2 = ['1', '2', '3', '4', '5', '6']

continue = True

while continue == True:
    for i in List1:
        print i
        print '/n'
        continue = False

while continue == False:
     for i in List2:
          print i
          print '/n'
          continue = True

Sortie:

a
b
c
d
e
f
1
2
3
4
5
6

Sortie souhaitée:

a
1
b
2
c
3
d
4
e
5
f
6
0
Nick M. 8 août 2016 à 20:54

3 réponses

Meilleure réponse

Ma réponse est basée sur le code de votre question. Si c'est le format que vous recherchez, utilisez ma réponse. Sinon, les autres réponses sont plus Pythonic comme indiqué.

Veuillez noter que j'ai renommé "continuer" en "changer" car continuer est un mot Python réservé, produisant une erreur de syntaxe.

List1 = ['a', 'b' , 'c', 'd', 'e', 'f']

List2 = ['1', '2', '3', '4', '5', '6']

switch = True
while True:
    while switch == True:
        for i in List1:
            print(i)
            List1.pop(0)
            switch = False
            break

    while switch == False:
        for i in List2:
            print(i)
            List2.pop(0)
            switch = True
            break

Si vous définissez l'état de la variable switch, puis coupez la boucle, elle fera exactement ce que vous désirez.

En raison de cette rupture de boucle, j'ai .pop() la 0e valeur d'index pour garantir que la sortie correcte est reçue.

Ce code est très inefficace et je suis sûr que vous pouvez trouver d'autres méthodes pour produire la sortie souhaitée.

Modifier: pour ce faire avec des longueurs de liste inégales, vous devez ajouter switch = False à la fin de la boucle while switch == True: et vice versa pour while switch == False:

Edit 2: Cela vous donne également une solution pour basculer entre les boucles :)

2
M it 8 août 2016 à 19:05

Le continue = False n'empêche pas la boucle for de s'exécuter complètement. La condition while n'est évaluée qu'après la boucle for. Cela entraîne l'impression de tous les éléments de List1, puis tous les éléments de List2.

Il existe plusieurs façons de parcourir deux listes

# One option
for k in range(len(List1)):
    print List1[k]
    print List2[k]

# Another option
for a, b in zip(List1, List2);
    print a
    print b
1
Suever 8 août 2016 à 17:56

La fonction zip de Python fournit un moyen très concis d'y parvenir objectif.

for x,y in zip(List1,List2):
    print(x)
    print(y)

# Out:
a
1
b
2
c
3
d
4
e
5
f
6

Il s'agit d'une solution beaucoup plus Pythonic. Vous n'avez pas besoin de deux boucles différentes, vous avez besoin d'une boucle qui les imprime dans l'ordre que vous désirez. La fonction "zip" mettra la liste en paires, puis mettra chaque paire en x, y à mesure que la boucle progresse. Ainsi, vous pourrez imprimer une valeur de chaque liste à chaque itération de la liste.

Parfois, en posant des questions, les gens peuvent avoir le problème xy, dans lequel ils posent des questions sur leur solution à un problème plutôt que de poser des questions sur le problème lui-même. Il est toujours bon de prendre du recul et de demander si votre approche semble être la meilleure, et si vous rencontrez des problèmes, quelles autres approches pourraient être possibles. Il semble que vous considérez votre problème comme un problème de va-et-vient entre deux listes, ce qui vous a amené à penser à deux boucles, une pour chaque liste. Mais une meilleure solution implique une seule boucle qui garde la trace des deux listes en même temps.

6
Community 20 mars 2017 à 10:29