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 :

Générer une liste à partir d'une autre


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Générer une liste à partir d'une autre
    Bonjour à toutes et à tous,

    Comme vous allez vous en rendre compte, je ne suis pas un pro de la programmation...
    Je dispose d'une liste de nombre allant de 1 à 4.
    list1 = [1, 2, 3, 4]
    Mon but est de créer une liste contenant l'ensemble des combinaisons possibles (ici 4^2=16) des éléments de la liste sous la forme (chaîne de caractères):
    '1 - 1'
    '1 - 2'
    '1 - 3'
    '1 - 4'
    '2 - 1'
    '2 - 2'
    etc...

    Pour l'instant mon code est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    list1 = [1, 2, 3, 4]
    list2 = list1
     
    a=[]
    b=[]
    for i in list1:
        for j in list2:
            a.append(str(i))
            b.append(str(j))
    c=zip(a,b)
    print c
    Au final j'obtiens:
    [('1', '1'), ('1', '2'), ('1', '3'), ('1', '4'), ('2', '1'), ('2', '2'), ('2', '3'), ('2', '4'), ('3', '1'), ('3', '2'), ('3', '3'), ('3', '4'), ('4', '1'), ('4', '2'), ('4', '3'), ('4', '4')]
    Alors qu'il me faudrait la liste suivante:
    [('1 - 1'),('1 - 2'),('1 - 3'),('1 - 4'),('2 - 1'), ..., ('4 - 4')].
    Quelqu'un aurait-il la gentillesse de me guider vers une solution ?

    Merci d'avance

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Points : 224
    Points
    224
    Par défaut
    Il faut que tu crées une seule liste, contenant des chaîne de caractères de la forme "i-j".
    La création de cette chaîne peut se fait avec la méthode de chaîne join (qui prend en paramètre la liste ou le tuple à concaténer):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    >>> x = '-'.join((str(1), str(2)))
    >>> x
    '1-2'
    Ton code pourrait donc ressembler à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> list1 = [1,2,3,4]
    >>> list2 = list1
    >>> result = []
    >>> for i in list1:
    ...     for j in list2:
    ...             result.append('-'.join((str(i), str(j))))
    ... 
    >>> result
    ['1-1', '1-2', '1-3', '1-4', '2-1', '2-2', '2-3', '2-4', '3-1', '3-2', '3-3', '3-4', '4-1', '4-2', '4-3', '4-4']
    Ou alors, plus concis (mais pas forcément plus clair) en utilisant les "list comprehensions" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> list1 = [1,2,3,4]
    >>> list2 = list1
    >>> result = ['-'.join((str(i),str(j))) for i in list1 for j in list2]
    >>> result
    ['1-1', '1-2', '1-3', '1-4', '2-1', '2-2', '2-3', '2-4', '3-1', '3-2', '3-3', '3-4', '4-1', '4-2', '4-3', '4-4']

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    on peut regarder aussi du côté des itertools

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    from itertools import product
     
    list1 = [1,2,3,4]
    result = ["%i-%i"%p for p in product(list1,list1)]

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Un grand merci à vous 2, dont les 2 solutions fonctionnent à merveille ! Je crois commencer à comprendre les "list compréhension"

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

Discussions similaires

  1. Selection à partir d'une liste et renvoyant une liste
    Par Thebaloo dans le forum Requêtes
    Réponses: 10
    Dernier message: 20/12/2012, 11h47
  2. Réponses: 7
    Dernier message: 22/06/2012, 13h12
  3. Réponses: 8
    Dernier message: 10/12/2009, 17h53
  4. Réponses: 2
    Dernier message: 01/05/2008, 14h36
  5. remplir une liste à partir d'une liste
    Par LeXo dans le forum Access
    Réponses: 7
    Dernier message: 14/04/2006, 13h29

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