J'ai deux listes que je dois parcourir ensemble. Laissez-moi vous montrer comment:
ListC=("1A","2B","3C","4A","1B","2C","3A","4C".... and so on)
À partir de ces listes, j'aimerais avoir cette liste
ListC=("1A","2B","3C","4A")
Et même faire une liste plus longue dans laquelle je peut boucler la même itération
listA=[1,2,3,4] listB=["A","B","C"]
Je n'ai trouvé aucun tutoriel en ligne qui répondrait à cette question Merci.
3 Réponses :
Utilisez zip
et itertools.cycle
:
>>> from itertools import cycle, islice >>> [f'{x}{y}' for x, y in islice(zip(cycle(listA), cycle(listB)), 8)] ['1A', '2B', '3C', '4A', '1B', '2C', '3A', '4B'] # cycle(listA): 1 2 3 4 1 2 3 4 1 2 3 4 1 ... # cycle(listB): "A" "B" "C" "A" "B" "C" "A" "B" "C" "A" "B" "C" "A" ... # Note that the result itself is a cycle of 12 unique elements, because # the least common multiple (LCM) of 3 and 4 is 12.
cycle
parcourt sans fin les éléments de son argument; zip
arrête d'itérer une fois que son argument le plus court est épuisé.
Vous pouvez utiliser cycle
avec les deux listes, mais le résultat sera être une suite infinie de valeurs; vous devrez utiliser quelque chose comme itertools.islice
pour prendre un préfixe fini du résultat.
>>> from itertools import cycle >>> listA = [1, 2, 3, 4] >>> listB = ["A", "B", "C"] >>> [f'{x}{y}' for x, y in zip(listA, cycle(listB))] ['1A', '2B', '3C', '4A'] # listA: 1 2 3 4 # cycle(listB): "A" "B" "C" "A" "B" "C" ...
listA=[1,2,3,4] listB=["A","B","C"] listC=[] for a in listA: index = listA.index(a) if listA.index(a) > len(listB) - 1: if listC[-1][1] != listB[-1]: index = listB.index(listC[-1][1]) + 1 else: index = 0 listC.append(str(a)+listB[index]) print(listC)
En plus d'être encombrant, cela suppose que les listes n'ont pas de doublons; index
renvoie l'index de la première occurrence d'un élément uniquement.
ce n'est pas une bonne idée si les éléments de listA
ne sont pas uniques car list.index
renvoie la première occurrence d'un élément
Vous pouvez utiliser modulo pour résoudre ce genre de problème. Voici le code pour répéter cela 100 fois:
l1 = [1, 2, 3, 4] l2 = ['a', 'b', 'c'] result = [] for i in range(100): result.append(str(l1[i % len(l1)]) + l2[i % len(l2)]) print (result)
Combien de temps voulez-vous que votre
ListC
dure? quel est le critère de fin / dernier élément?