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]