0
votes

Comment vérifier les plus grands nombres consécutifs dans une liste en Python?

Je souhaite rechercher les plus grands nombres consécutifs dans une liste et les ajouter à une nouvelle liste.

ma_liste = [97, 98, 97, 98, 99, 97, 98, 97]

J'ai essayé d'utiliser la boucle while mais lorsqu'elle est incrémentée, elle n'ajoute pas de nombres.

final_list = []
j = 0
while j < (len(my_list) - 1):
    if my_list[j] + 1 == my_list[j + 1]:
        final_list.append(my_list[j])
        final_list.append(my_list[j + 1])
        j += 2
    else:
        j += 1    
print(final_list)

La sortie attendue doit être final_list = [97,98,99]

Mais ma sortie est

final_list = [97,98]


1 commentaires

Vous aurez probablement un autre problème si vous commencez par un nombre qui n'est pas le plus petit (par exemple [100, 97, ...] ou si vous ajoutez [..., 1,2, ..] quelque part entre les deux car votre code vérifie uniquement si j et j + 1 de la liste d'origine sont consécutifs. Vous devez comparer les valeurs de ma_liste à la dernière valeur de nouvelle_liste pour obtenir une liste consécutive. Mais alors vous avez toujours un problème si votre premier numéro ne l'est pas le plus petit donc vous devez d'abord trouver le plus petit nombre pour obtenir le vrai point de départ. Cela devient assez compliqué si vous voulez extraire plusieurs nombres consécutifs.


3 Réponses :


0
votes

Vous pouvez utiliser des groupes_ consécutifs du module more_itertools :

import more_itertools as mit

my_list = [97, 98, 97, 98, 99, 97, 98, 97]

print(max([list(group) for group in mit.consecutive_groups(my_list)], key=len))
# [97, 98, 99]

Exemple :

XXX

Remarque : Comme il s'agit d'un module tiers, vous devez l'installer avant d'essayer -Â pip install more_itertools.


0 commentaires

0
votes

Voici une solution sans outil externe:

    my_list = [97, 98, 97, 1, 2, 100, 98, 99, 97, 98, 97];
    #sort list max to min
    my_list.sort(reverse = True)
    # take largest number as starting point
    last_item = my_list[0]
    new_list = [last_item]
    # loop through list for every item to assure that we dont stop too soon
    for i in range(len(my_list)):
        for number in my_list:
            # compare the current number with the last number inserted to new_list
            # if its smaller we add it to the list and update the last item
            if number == last_item-1:
                new_list.append(number)
                last_item = number
    print(new_list)

Veuillez noter que ce n'est probablement pas la manière la plus efficace de le faire.


0 commentaires

0
votes

Trouvez les indices où la différence entre les éléments consécutifs ! = 1 en utilisant np.where et np.diff (renvoie un tuple, récupérez le premier élément du tuple qui est un tableau d'indices), ajoutez 1 à chaque élément pour obtenir les points de terminaison pour np.split .
Trouvez le plus grand tableau de la liste résultante en utilisant max(list,key=len)

>>> import numpy as np
>>> my_list = [97, 98, 97, 98, 99, 97, 98, 97]
>>> max(np.split(my_list,np.where(np.diff(my_list) != 1)[0]+1),key=len)
array([97, 98, 99])


0 commentaires