liste python
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

liste python



  1. #1
    cedric125

    liste python


    ------

    bonjour,
    j'ai une liste donné
    a=[['4'], ['5'], ['3', '1', '25'], ['1', '0', '12'], ['2', '0', '-5'], ['0', '1', '0'], ['2', '1', '7'], []] et je voudrais changer les elements de cette liste qui sont de types str en int comment je doit m'y prendre?

    -----

  2. #2
    polo974

    Re : liste python

    d'abord, c'est une liste de listes...

    Code:
    [[int(y) for y in x] for x in a]
    sauf que là, j'ai créé une nouvelle liste de liste et non pas remplacé les éléments dans la liste...

    pour remplacer les éléments dans chaque sous-liste, il faut parcourir chaque sous-liste de la liste avec un index...

    et je ne donnerai pas de suite la réponse...
    Jusqu'ici tout va bien...

  3. #3
    pm42

    Re : liste python

    Ou :
    Code:
    map(lambda x: map(int, x), a)

  4. #4
    cedric125

    Re : liste python

    bonsoir,j'ai pu faire comme ça
    Code:
    raw=[['3', '1', '25'], ['1', '0', '12'], ['2', '0', '-5'], ['0', '1', '0'], ['2', '1', '7'], []]
    b=[list(map(int, elem)) for elem in raw]

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : liste python

    Dans le cas présent utiliser uniquement des list-compréhension ou map est plus clair et maintenable que de les mélanger.

  7. #6
    polo974

    Re : liste python

    arghhhh
    en python2 les listes sont 20 à 30 fois plus performantes que les map mais en python3, c'est les map qui sont 10 fois plus performantes...

    sauf que map en python3 renvoie des objets map, pas des listes... et ça marche moins bien dans un json.dumps(...)

    pour avoir de vraies listes, il faut list(map(lambda x: list(map(int, x)), a))
    et du coup, list(map(lambda x: list(map(int, x)), a)) est un poil plus lent que [[int(y) for y in x] for x in a]

    ( python3 est nettement plus lent (20 fois) que python2 pour [[int(y) for y in x] for x in a] ... un peu dommage, quand même...)


    mais globalement on a toujours créé une nouvelle liste, ce qui peut ne pas marcher s'il fallait absolument modifier la liste initiale (genre liste passée en paramètre, mais pas de return de nouvelle liste).
    Jusqu'ici tout va bien...

  8. #7
    pm42

    Re : liste python

    Citation Envoyé par polo974 Voir le message
    en python2 les listes sont 20 à 30 fois plus performantes que les map mais en python3, c'est les map qui sont 10 fois plus performantes...
    1) il faut vraiment être motivé pour faire du python 2 de nos jours vu qu'il a été arrêté au 1er janvier et que les auteurs du langage recommendent de passer en python3 aussi vite que possible (https://www.python.org/doc/sunset-python-2/)
    2) je veux bien une référence parce que coté différence de perfs, on lit plutôt que les 2 sont proches : Voir https://stackoverflow.com/questions/...ehension-vs-ma
    https://blog.finxter.com/which-is-fa...ion-in-python/

    De mon coté, je trouve un facteur 2 en faveur de la list-compréhension et dans le même sens entre python2 et python3


    Citation Envoyé par polo974 Voir le message
    sauf que map en python3 renvoie des objets map, pas des listes... et ça marche moins bien dans un json.dumps(...)
    Et cela permet la lazy évaluation, de s'initier à la programmation fonctionnelle, d'être dans les logiques map/reduce, etc. Les 2 usages se discutent parce que d'un autre coté, les liste-compréhensions sont plus fréquentes en python et plus faciles à comprendre pour les débutants.

    Citation Envoyé par polo974 Voir le message
    ( python3 est nettement plus lent (20 fois) que python2 pour [[int(y) for y in x] for x in a] ... un peu dommage, quand même...)
    Là aussi, je veux bien une référence : je trouve des temps très proches.

    Citation Envoyé par polo974 Voir le message
    mais globalement on a toujours créé une nouvelle liste
    Oui parce que c'est une bien meilleure idée et que cela évite de nombreux bugs.

  9. #8
    polo974

    Re : liste python

    Citation Envoyé par pm42 Voir le message
    1) il faut vraiment être motivé pour faire du python 2 de nos jours vu qu'il a été arrêté au 1er janvier et que les auteurs du langage recommandent de passer en python3 aussi vite que possible (https://www.python.org/doc/sunset-python-2/)
    Je sais, je suis d'ailleurs sur un gros chantier de basculement de code (écrit par beaucoup, dont une partie assez ... comment dire ... (une sorte de mykado fait avec des grenades dégoupillées...).
    Je demandais de basculer en douceur depuis un paquet d'années, mais "Ce n'est pas l'urgence...".
    Et maintenant, je déguste et hérite de leurs "choses" et comme la perf est souvent un soucis, je fais pas mal de comparaisons afin d'améliorer (ou ne pas trop perdre), d'où ce réflexe...
    2) je veux bien une référence parce que coté différence de perfs, on lit plutôt que les 2 sont proches ...
    De mon coté, je trouve un facteur 2 en faveur de la list-compréhension et dans le même sens entre python2 et python3
    En fait, j'ai bugué (la honte...) en py2 (les variables dans la list-compréhension ne sont pas locales en py2 alors qu'elles le sont en py3... (mais de toute façon, c'est pas bien comme j'avais bâclé mon test en réutilisant des noms sur une lettre (et bam, une leçon pour moi ))).
    Après nouveaux tests, en gros, c'est légèrement en faveur de la list-comprehension, et légèrement en faveur de py3.

    Et cela permet la lazy évaluation, de s'initier à la programmation fonctionnelle, d'être dans les logiques map/reduce, etc. Les 2 usages se discutent parce que d'un autre coté, les liste-compréhensions sont plus fréquentes en python et plus faciles à comprendre pour les débutants.
    Oui, les liste-compréhensions sont "immédiates", alors que les map (et autres générateurs) sont en devenir.
    Chacun ses avantages et ses inconvénients et donc domaine d'utilisation.
    L’intérêt des générateurs est lorsqu’on manipule de très grosses quantités de données: on n'explose pas la ram, par contre:
    • ce sont des objets "one shot", on ne les parcourt qu'une seule fois...
    • ce sont des objets "en devenir", si on modifie la source après la création du map (oui, je sais, c'est pas bien...), le résultat du parcourt du map en est affecté.
    C'est (à mon avis) nettement plus subtil que les pointeurs en C dont beaucoup font tout un plat ...

    Ah, et puisque j'ai parlé de générateur: voici le générateur sans passer par map:
    g = ((int(y) for y in x) for x in a)
    il suffit juste de remplacer les [] par des ()... (ici 2 fois, vu qu'on a des listes imbriquées) et hop, on a un objet "en devenir"...

    (à propos de nouvelle liste vs modifier la liste originelle):
    Oui parce que c'est une bien meilleure idée et que cela évite de nombreux bugs.
    C'est sûr, mais la demande était ce qu'elle était (et peut-être mal formulée).
    Jusqu'ici tout va bien...

Discussions similaires

  1. [PYTHON] dictionnaire de liste, tous les assemblages
    Par DavianThule95 dans le forum Programmation et langages, Algorithmique
    Réponses: 14
    Dernier message: 02/07/2017, 10h24
  2. Fonction et liste Python
    Par Lionelno dans le forum Programmation et langages, Algorithmique
    Réponses: 10
    Dernier message: 26/01/2016, 09h27
  3. Python: liste de listes
    Par BienZen dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 14/09/2014, 10h59
  4. fonction (min d'une liste) (python)
    Par afaf1995 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 24/02/2014, 08h29
  5. PYTHON - tirage avec probabilité dans une liste
    Par invitef702cf04 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 01/05/2012, 22h48