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 :

Créer des sous-liste de taille n dans une liste [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut Créer des sous-liste de taille n dans une liste
    Bonjour,

    Encore moi

    J'essaie de faire une matrice carrée avec des listes.
    le résultat doit ressemble à ça, avec n = 8 :
    m1 :
    [2, 4, 6, 8, 10, 12, 14, 16]
    [18, 20, 22, 24, 26, 28, 30, 32]
    [34, 36, 38, 40, 42, 44, 46, 48]
    [50, 52, 54, 56, 58, 60, 62, 64]
    [66, 68, 70, 72, 74, 76, 78, 80]
    [82, 84, 86, 88, 90, 92, 94, 96]
    [98, 100, 102, 104, 106, 108, 110, 112]
    [114, 116, 118, 120, 122, 124, 126, 128]
    Donc avec n=8, je doit avoir 8 lignes de chacune 8 nombres, 2 par 2.

    J'en suis là avec mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m1 = [nbre for nbre in range(2,n*n*2+1,2)]
    et là j'obtiens donc tous les nombres nécessaires, mais dans une seule liste.

    Et je ne sais pas comment découper cette liste en n nombres.

    Là en gros ça fait une heure que j'essaie de faire du slicing dans une boucle, sans succés je doit pas faire ce qu'il faut.

    Des idées ?
    Peut-être c'est mal fait au départ, il était peut-être possible de créer, dès le début, une liste de liste avec n termes. Mais je n'ai pas su faire non plus.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Salut,

    Citation Envoyé par RowanMayfair Voir le message
    J'en suis là avec mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m1 = [nbre for nbre in range(2,n*n*2+1,2)]
    et là j'obtiens donc tous les nombres nécessaires, mais dans une seule liste.
    Il faudrait construire des listes dans la liste... Ce qui vous a été déjà présenté ici dans une discussion assez récente.

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

  3. #3
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    oui, construire une liste dans une liste, OK.
    Mais n listes de n caractères ?
    Je ne m'en sors pas.
    Je me retrouve avec des "sous-listes" de la totalité de ce que je veux....pas seulement les n premiers termes.

    Bref. je suis fatiguée de ma journée, je reprendrais ça demain matin, je serai peut-être plus inspirée

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Salut,
    Il faut y aller doucement.
    Une liste simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> n = 4
    >>> [ i for i in range(n) ]
    [0, 1, 2, 3]
    Une liste de listes simples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> [[ i for i in range(n) ] for j in range(n) ]
    [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
    Puis on ajoute le nombre de lignes à i:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> [[ n*j + i for i in range(n) ] for j in range(n) ]
    [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]]
    >>>
    que l'on peut multiplier par 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> [[ 2*(n*j + i) for i in range(n) ] for j in range(n) ]
    [[0, 2, 4, 6], [8, 10, 12, 14], [16, 18, 20, 22], [24, 26, 28, 30]]
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    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,

    Avant de tout faire en une seule ligne, je suggère de faire avec des boucles "normales":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mat = []
    n = 8
    for ligne in range(0, n):
        mat.append([]) # nouvelle ligne
        for colonne in range(0, n):
            mat[ligne].append(colonne + n*ligne) # nouvelle colonne de la ligne
    Ca qui donne comme résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for ligne in range(0, n):
        print(mat[ligne]) # affichage de chaque ligne
    print()
     
    [0, 1, 2, 3, 4, 5, 6, 7]
    [8, 9, 10, 11, 12, 13, 14, 15]
    [16, 17, 18, 19, 20, 21, 22, 23]
    [24, 25, 26, 27, 28, 29, 30, 31]
    [32, 33, 34, 35, 36, 37, 38, 39]
    [40, 41, 42, 43, 44, 45, 46, 47]
    [48, 49, 50, 51, 52, 53, 54, 55]
    [56, 57, 58, 59, 60, 61, 62, 63]
    Une fois qu'on a bien compris ça, on peut tout faire en une seule ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mat = [[colonne+n*ligne for colonne in range(0, n)] for ligne in range(0, n)]
    Ce qui donne, bien sûr, le même résultat.

  6. #6
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    Je me rends compte qu'en effet, j'ai de grosses lacunes.
    J'ai suivi la méthode Swinnen, donc j'ai manipulé des boucles while dans tous les sens.
    Par contre les boucles for je les ait découvertes bien plus tard. Donc là imbriquer des boucles for, en créant des listes de listes, tout ça avec range().....ça fait beaucoup.

    bref donc ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for j in range(n) :
        m3.append([])
        for i in range(n) :
            m3[j].append(2*(n*j + i))
    c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m2 = [[ 2*(n*j + i) for i in range(n) ] for j in range(n) ]
    c'est à dire précisément ce que je voulais faire.
    Enfin la compréhension là, pour le coup, je vais pas trop me prendre la tête dessus, c'est pas le problème. Quand j'aurai vraiment bien compris le mécanismes de ces 2 boucles, la compréhension c'est pas encore le plus dur.

    Je vais essayer de faire la matrice suivante, on va voir si j'y arrive seule

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/03/2013, 13h23
  2. Réponses: 2
    Dernier message: 19/01/2010, 11h08
  3. [1.x] Créer des sous-dossiers dans les dossiers de templates
    Par cmasset dans le forum Symfony
    Réponses: 2
    Dernier message: 24/09/2009, 18h21
  4. [AC-2007] créer des sous catégories dans un sous formulaire
    Par damlimoges dans le forum IHM
    Réponses: 2
    Dernier message: 12/06/2009, 08h31
  5. [PEAR][DB][Datagrid] créer des sous-totaux dans un datagrid
    Par Garra dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 17/10/2008, 15h46

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