IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Trouver la plus petite étendu d'une liste


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2022
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2022
    Messages : 28
    Par défaut Trouver la plus petite étendu d'une liste
    Bonjour ou bonsoir,
    Je me posais une question à propos des listes Python : Est-il possible de déterminer la plus petite étendu d'une liste sans avoir à calculer chaque étendu une par une ?
    J'avais déjà eu l'idée de faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def etendu(liste):
      etendu_min = []
      for i in range(len(liste)-4):
        a = liste[i+4]-liste[i]
        etendu_min.append(a)
      return min(etendu_min)
    J'ai mis et car j'ai besoin d'une étendu sur 4 nombres qui se suivent dans la liste (les nombres sont déjà triés par ordre croissant). De plus, j'ai également besoin que cette fonction renvoie la plus petite étendu de la liste "etendu_min".

    Le problème est que cette méthode m'a l'air très peu optimisée. J'ai donc fait des recherches sur une fonction déjà faite et qui aurait le même résultat mais rien de concluant. Je vous demande donc si une telle fonction existait ?
    Si mon programme n'est pas clair ou que vous voulez des précisions, je répondrais avec plaisir.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 940
    Par défaut
    Pour moi, ta demande n'a pas de sens.
    L'étendue d'une liste de chiffre c'est la différence entre la plus grande valeur de cette liste et la plus petite de cette liste.
    Tu ne peux pas avoir deux étendues pour la même liste.
    Et par extension tu ne peut pas avoir une étendue minimum.

    Ou alors, il faut diviser ta liste en plusieurs listes et effectivement faire le calcul pour chaque liste obtenue.

    Edit : Tu peux découper assez faciliement ta liste en sous liste via la mécanique de liste compréhension.
    Ici, tab est découpé en liste de 3 éléments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tab = (1,2,3,4,5,6,7,8,9,10)
    sublist = [list(tab[i:i+3]) for i in range(0, len(tab), 3)]
    Contenu de sublist :
    [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Citation Envoyé par Zarkoro Voir le message
    Si mon programme n'est pas clair ou que vous voulez des précisions, je répondrais avec plaisir.
    Il faut commencer par définir ce que vous entendez par "l'étendu d'une liste" (avec éventuellement des exemples).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 940
    Par défaut
    En partant du principe que tu découpe ta liste en 4 parties.
    Tu eux effectuer un premier découpage de la liste, puis former une seconde liste avec les étendues de toutes les listes découpées et d'y trouver le minimum.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tab = [1, 4, 5, 6, 9, 18, 24, 25, 30, 42, 45, 50, 51, 52, 53,54]
    etendue_mini =  min([max(sublist) - min(sublist) for sublist in [list(tab[i:i+4]) for i in range(0, len(tab), 4)]])
    Ici l'entendue minimum correspond à celle du dernier sous-groupe de 4, c'est à dire 3, (54-51)

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2022
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2022
    Messages : 28
    Par défaut
    Effectivement je me suis mal exprimé mais je ne sais pas réellement comment le définir.
    Ce que je voudrait c'est une fonction qui permette de trouver que, par exemple dans la liste [1, 2, 2, 3, 5, 7, 8, 11], le plus petit écart de 4 nombres qui se suivent est 2 : pour [1, 2, 2, 3] on trouve 3-1=2, là où pour [2, 3, 5, 7] on trouve 7-2=5 ; et donc 2<5.
    Le premier programme que j'ai joint me permet ce résultat mais en calculant ces écarts de nombres un par un ce qui est beaucoup trop long pour peu que la liste soit trop grande.
    J'espère que j'ai été plus clair.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2022
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2022
    Messages : 28
    Par défaut
    Citation Envoyé par popo Voir le message
    En partant du principe que tu découpe ta liste en 4 parties.
    Tu eux effectuer un premier découpage de la liste, puis former une seconde liste avec les étendues de toutes les listes découpées et d'y trouver le minimum.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tab = [1, 4, 5, 6, 9, 18, 24, 25, 30, 42, 45, 50, 51, 52, 53,54]
    etendue_mini =  min([max(sublist) - min(sublist) for sublist in [list(tab[i:i+4]) for i in range(0, len(tab), 4)]])
    Merci pour cette solution, elle me semble très bien marcher dans mon cas. Mais le problème est que je devrait tester, en plus de la liste [51, 52, 53, 54], la liste [50, 51, 52, 53].
    De plus, la longueur de ma liste n'est pas forcement un multiple de 4.

    Comment est-ce que je pourrais adapter ce code en fonction des contraintes précédentes ?


    Edit : Je crois avoir trouver en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    exemple = [1, 4, 5, 6, 9, 18, 24, 25, 30, 42, 45, 50, 51, 52, 52, 53]
    tab = []
    for j in range(3):
      liste = exemple
      del liste[:j]
      del liste[len(exemple)-len(exemple)%4:]
      for k in range(len(liste)):
        tab.append(liste[k])
    etendue_mini =  min([max(sublist) - min(sublist) for sublist in [list(tab[i:i+4]) for i in range(0, len(tab), 4)]])
    mais ça fait peut-être mal aux yeux de votre point de vue...

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Citation Envoyé par Zarkoro Voir le message
    mais ça fait peut-être mal aux yeux de votre point de vue...
    C'est "bavard" comparé à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> L = [1, 4, 5, 6, 9, 18, 24, 25, 30, 42, 45, 50, 51, 52, 52, 53]
    >>> min(b-a for a, b in zip(L, L[3:]))
    2
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2022
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2022
    Messages : 28
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    C'est "bavard" comparé à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> L = [1, 4, 5, 6, 9, 18, 24, 25, 30, 42, 45, 50, 51, 52, 52, 53]
    >>> min(b-a for a, b in zip(L, L[3:]))
    2
    - W
    Merci, beaucoup c'est exactement ce dont j'avais besoin !

    Par contre ce serait possible de me décrire ce que cela fait exactement ? Je vous avoue que je ne suis pas expérimenté et je ne comprend que les grandes lignes de ce code…

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Citation Envoyé par Zarkoro Voir le message
    Par contre ce serait possible de me décrire ce que cela fait exactement ?
    ça ne fait pas plus que çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> L = [1, 4, 5, 6, 9, 18, 24, 25, 30, 42, 45, 50, 51, 52, 52, 53]
    >>> M = []
    >>> for i in range(len(L)-3):
    ...     M.append(L[i+3] - L[i])
    ...
    >>> min(M)
    2
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2022
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2022
    Messages : 28
    Par défaut
    Parfait ! Mon problème est donc résolu.
    Je vous remercie d'avoir pris de votre temps pour me répondre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/09/2020, 12h26
  2. Trouver la valeur "la plus proche de" dans une liste
    Par YannGTT dans le forum Débuter
    Réponses: 4
    Dernier message: 03/05/2020, 14h54
  3. [XL-2010] trouver la plus petite date d'une liste
    Par Philippe76 dans le forum Excel
    Réponses: 1
    Dernier message: 10/01/2013, 15h53
  4. Réponses: 13
    Dernier message: 02/11/2011, 08h47
  5. Trouver le plus petit élément d'une liste
    Par Invité dans le forum C#
    Réponses: 1
    Dernier message: 23/04/2007, 10h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo