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
ListCdure? quel est le critère de fin / dernier élément?