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 :

Mélanger un tableau


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut Mélanger un tableau
    Bonjour,
    existe-t-il un moyen élégant de mélanger les entrées d'un tableau ?

    Par exemple, j'entre ['un', 'deux', 'trois', 'quatre'] et j'obtiens quelque chose comme ['trois', 'deux', 'un', 'quatre'].

  2. #2
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    Citation Envoyé par rambc Voir le message
    Bonjour,
    existe-t-il un moyen élégant de mélanger les entrées d'un tableau ?

    Par exemple, j'entre ['un', 'deux', 'trois', 'quatre'] et j'obtiens quelque chose comme ['trois', 'deux', 'un', 'quatre'].
    Il s'agit sans doute de listes. Il existe bien un objet array en Python, mais il ne peut stocker de chaînes de caratères.
    Pour le mélange de la liste en place, c'est pratiquement dans la FAQ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import random
     
    random.seed()
     
    liste = ['un', 'deux', 'trois', 'quatre']
    print liste
    random.shuffle(liste)
    print liste
    Si vous ne voulez pas détruire la liste originale, vous pouvez y acceder une table d'entiers "shufflés":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import random
     
    random.seed()
     
    liste = ['un', 'deux', 'trois', 'quatre']
    table = range(len(liste))
    print liste
     
    random.shuffle(table)
    print [liste[table[_]] for _ in range(len(liste))]
    Il y a peut-être plus élégant, regardez le module random dans le manuel, je n'en connais pas toutes les subtilités...

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il y a dans le module random une fonction shuffle() qui fait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    import random
     
    L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    random.shuffle(L)
    print L
    [4, 9, 3, 5, 0, 1, 7, 2, 6, 8]
    Tyrtamos

    [grillé par Pierre Maurette ]

    Edit: complément: si on veut pas toucher à la liste, on peut utiliser une autre liste comme index, dont les valeurs d'index sont mélangées. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IND = random.sample(xrange(0,10),10)
    [4, 6, 2, 8, 3, 0, 7, 5, 1, 9]

  4. #4
    Membre très actif

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Billets dans le blog
    1
    Par défaut
    Salut,

    En utilisant un générateur de nombres aléatoires dans les limites du nombre de variables contenues dans ton tableau.

    dans une boucle :
    - récupérer le nombre aléatoire généré en fonction de la taille de ta liste :
    Par exemple, tu as 4 variables :
    randint( a, b)
    Retourne un entier aléatoire N de telle manière que a <= N <= b.
    pour toi : randint (0,len(MaListe))


    - Tu as crée une liste dans laquelle tu vas placer chaque nombre aléatoire généré SI, et seulement SI, ce nombre n'y est déjà pas.
    - Si tu as pu introduire le nombre aléatoire dans la liste, c'est qu'il n'a pas encore été tiré et que tu n'as pas encore traité l'entrée correspondante de ta liste de valeurs .
    Tu vas donc pouvoir sélectionner l'entrée de ta liste de valeur à l'indice donné par le nombre aléatoire tiré et placer cette valeur dans la nouvelle liste triée .

    - Tu continues tant que tu n'as pas utilisé toutes les valeurs contenues dans la liste des valeurs - 1 puisque la dernière valeur n'a pas besoin d'être choisie aléatoirement puisqu'il ne reste qu'elle. (ça raccourcis la durée du programme !).

    - Par précaution, met une limite maxi au bouclage car si, en cas de malheur, tu ne parvenais pas à pouvoir sélectionner toutes les valeurs de ta liste de valeurs, il serait malvenu que ton programme monopolise ta machine indéfiniment . (Tu mets le nombre de boucles à len(MaListe)*10000 par exemple.

    Mais si tu as terminé le traitement de ta liste avant cette limite, tu dois forcer ton programme à sortir de la boucle .

    Voilà une marche à suivre.
    Pour le code, c'est à toi de l'écrire. C'est comme ça qu'on apprend.
    Présente ton code en cas de problème.

    A+

  5. #5
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Merci à tous.

    Les deux premiers messages proposent une méthode élégante comme je cherchais.

    Sinon merci pour la 3ème méthode (même si je savais déjà faire ce genre de chose).

    PS : promis Pierre Maurette, je m'attarderais un peu sur la FAQ à l'occasion.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    " je m'attarderais un peu sur la FAQ à l'occasion "
    Ce conditionnel ne donne pas l'impression d'une grande motivation.............

  7. #7
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Ne le dis surtout pas à mes parents...

  8. #8
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Par défaut permutation de liste de fichiers images
    Bonjour!
    Je cherche à mélanger au hasard une liste d'images, par exemple:

    images = (PhotoImage(file='photo1.gif'), PhotoImage(file='photo2.gif'), PhotoImage(file='photo3.gif') )

    j'ai essayé:

    import random
    images2 = random.shuffle(images)

    mais ça ne fonctionne pas...

    sinon, j'ai aussi tenté de créer la fonction de permutation de liste suivante et de rappeler ensuite la fonction pour l'appliquer à la liste images, mais ça n'a pas marché non plus...

    def listperm(lst):
    n = len(lst)
    for p in range (n):
    q = randrange(n)
    lst[p], lst[q] = lst[q], lst[p]
    return lst

    Quelques petits conseils seraient les bien venus...
    Merci d'avance!

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

Discussions similaires

  1. Mélanger un tableau de type vector
    Par who_knows dans le forum Langage
    Réponses: 3
    Dernier message: 25/11/2010, 12h14
  2. Mélanger un tableau, avec exceptions
    Par Niki59 dans le forum Langage
    Réponses: 6
    Dernier message: 20/09/2010, 20h56
  3. Mélanger un tableau
    Par endhumans dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 11/01/2010, 12h12
  4. Mélanger un tableau et prendre juste 2 éléments
    Par MaitrePylos dans le forum Ruby
    Réponses: 9
    Dernier message: 23/03/2007, 09h31
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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