La liste ci a
dessous imprime tous les éléments compris entre 0 et 5:
[1, 2, 3, 2, 3]
a = [100, 1, 10, 2, 3, 5, 8, 13, 2, 3, 55, 98] def new_list(x): new = [] for item in range(len(x)): if x[item] < 5 and x[item] > 0: new.append(x[item]) return new print new_list(a)
Comment puis-je imprimer la sous-liste où les éléments sont compris entre 0 et 5 inclus, et si l'élément tombe en dehors de la plage, commencer une nouvelle sous-liste?
Production attendue:
[1], [2,3,5], [2,3]
4 Réponses :
Ensuite, vous devriez faire une autre liste.
def new_list(x): new = [] returns = [] for item in x: # <- I modified the for loop if item < 5 and item > 0: new.append(item) elif len(new) > 0: # <- if out of range and new is not empty returns.append(new) new = [] if len(new) > 0: # <- last new check returns.append(new) return returns
Cela supprimera la dernière sous-liste; besoin d'un supplément if new: returns.append(new)
après la boucle for
, juste avant l'instruction return
.
J'ai créé une nouvelle liste appelée sous-liste appelée sub pour contenir des valeurs comprises entre 0 et 5. Lorsqu'il rencontre un nombre en dehors de 0 et 5, il ajoute la sous-liste à la liste principale appelée new et réinitialise la sous-liste pour qu'elle soit vide
a = [100, 1, 10, 2, 3, 5, 8, 13, 2, 3, 10, 3, 1, 3, 10, 1] def new_list(num_list): new = [] sub = [] for num in num_list: if num < 5 and num > 0: sub.append(num) else: if len(sub) >= 1: new.append(sub) sub = [] if len(sub) >= 1: new.append(sub) return new print(new_list(a))
C'était amusant. Juste un autre essai :-)
a = [1,2,100, 1, 10, 2, 3, 5, 8, 13, 2, 3, 55, 98,1,2,3,100,1]
def new_list(x): new = [] sub = [] temp = 0 for item in x: if item <= 5 and item >= 0: sub.append(item) if (temp > 5) or (temp == 0): new.append(sub) else: sub = [] temp = item return new print(new_list(a))
Juste pour le plaisir, je décide de le faire avec une liste de compréhension:
numbers = enumerate([100, 1, 10, 2, 3, 5, 8, 13, 2, 3, 55, 98]) result = [] for _ , num in numbers: if num > 5: continue aux = [num] for _ , num in numbers: if num > 5: break aux.append(num) result.append(aux) print(result)
J'ai utilisé ceci pour voir comment pénétrer dans une liste de compréhension https://stackoverflow.com/a/9572933/4082917
Remarque: c'est juste pour le plaisir :)
Et aussi, en utilisant enumerate, vous pouvez simplifier la version de la boucle:
numbers = enumerate([100, 1, 10, 2, 3, 5, 8, 13, 2, 3, 55, 98]) [[starter_number] + list(next(iter(())) if n>5 else n for i, n in numbers) for i, starter_number in numbers if starter_number<5]