1
votes

Python: Comment boucler une liste et l'ajouter à de nouvelles listes

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]


0 commentaires

4 Réponses :


1
votes

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


1 commentaires

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 .



1
votes

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))


0 commentaires

1
votes

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))


0 commentaires

1
votes

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]


0 commentaires