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 :

Liste de très grande taille


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Par défaut Liste de très grande taille
    Bonjour à tous,

    Je sais qu'il existe plusieurs façons de sauvegarder une liste, mais lorsque que cette liste est de très grande taille et que l'on doit la charger en mémoire, quelle est la plus rapide ?

    Merci pour vos réponses

  2. #2
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    Plus de détails S.V.P.

    La façon la plus commune d'avoir une "liste" de très longue taille (voire infinie) en Python est d'utiliser un itérateur.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Par défaut
    Je suis débutant et je ne comprends pas trop le sens d'itérateur.
    J'ai trouvé une explication sur Wikipedia http://fr.wikipedia.org/wiki/It%C3%A9rateur), mais si tu pouvais me montrer un exemple, ça serait vraiment sympa.

    Ma liste est une liste de nombres premiers pour l'instant elle est petite (10^6)mais j'aimerais l'étendre à tous ceux inférieurs à 10^9.

  4. #4
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    Pour les conserver en tout temps en mémoire, ça va prendre énormément de mémoire. Si tu veux limiter ça, il faudrait que tu trouves une façon alternative de solutionner ton problème ou utiliser quelque chose genre une base de données SQLite pour éviter de tout garder en mémoire.

  5. #5
    Membre expérimenté Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut Avec SQLITE
    Exemple de mise en mémoire avec SQLITE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #!/usr/bin/env python
    # -*- coding: iso-8859-1 -*-
     
    # import de SQLITE
    import sqlite3,os,os.path
    if os.path.exists('prem.db') : os.remove('prem.db') # J'efface l'ancien pour les essais
    connection = sqlite3.connect('prem.db') #Création d'un objet connection à la BDD, connection ou création si pas d'existence
    cursor = connection.cursor() #Création de l'objet curseur
     
    #  Création de la table
    cursor.execute('CREATE TABLE premTable (id INTEGER PRIMARY KEY,nombre INTEGER)')
     
    # Entrée directe d'enregistrement
    cursor.execute('INSERT INTO premTable VALUES (null, 1)')
     
    # Entrée indirecte d'enregistrement
    for i in [3,5,7,9,11]:
        cursor.execute('INSERT INTO premTable VALUES (null,'+str(i)+")")
        # Ou on peux faire normalement un truc comme ceci
        # cursor.execute('INSERT INTO premTable VALUES (null,?)',i)
    connection.commit()
     
    # Affichage des enregistrements
    print
    print
    print "Parcours direct du curseur avec une boucle for"
    cursor.execute('SELECT * FROM premTable')
    for row in cursor :
        for r in row:
            print r,
        print
    print
     
    cursor.close()
    connection.close()

  6. #6
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Par défaut
    Je ne connais pas ton projet, mais à mon sens, c'est dans une base de données. Une fois que tu l'as rentré, c'est facile de travailler avec.

    Enfin, c'est selon ce que tu entends par liste de très grande taille et ce que tu veux en faire. Ensuite, la plus rapide à monter en mémoire n'as pas de sens, car si tu veux cette liste en mémoire, c'est que tu veux l'utiliser. Je pense qu'il faut aussi te poser la question de savoir comment tu veux travailler avec cette masse de données.

  7. #7
    alex_pi
    Invité(e)
    Par défaut
    Si j'ai bien compté, il y a 50 847 534 nombres premiers avant 10^9. Ca ne me semble pas si inaccessible que ça de travailler avec, même s'il vaut mieux ne pas vouloir trop dupliquer la liste !

  8. #8
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Est-ce que tu utilises les listes de Python ?
    sinon, comme tous tes nombres sont des entiers, utilisent les tableaux de numpy. La mémoire utilisée devrait être beaucoup plus faible.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Par défaut
    Pour l'instant, j'ai fait des essais avec des listes python.
    En fait, j'ai plusieurs listes que je vais regrouper en une.
    En ce moment, j'essais de migrer sous ubuntu et j'ai quelques problèmes de drivers, mais dès que je peux, je ferais des essais avec tout ce que vous m'avez proposé.

    Merci à tous

Discussions similaires

  1. traitement d'image de très grande taille
    Par issane dans le forum Images
    Réponses: 4
    Dernier message: 03/06/2010, 07h50
  2. Réponses: 22
    Dernier message: 20/01/2009, 13h57
  3. Comment avoir une fonte de très grande taille ?
    Par Gébix dans le forum Mise en forme
    Réponses: 2
    Dernier message: 13/01/2007, 18h47
  4. Réponses: 5
    Dernier message: 21/11/2006, 16h24
  5. problème de conversion de très très grande taille !
    Par Conficius dans le forum Langage
    Réponses: 2
    Dernier message: 05/11/2005, 22h14

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