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 :

Demande d'aide pour comprendre des syntaxes Python


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Demande d'aide pour comprendre des syntaxes Python
    Bonjour,

    Je suis actuellement en train de porter en C# le code d'une application Python et je rencontre pas mal de difficultés car je n'ai aucune connaissance en Python, excepté celles que j'ai glané sur le net au fur et à mesure, et bien sûr le code n'est pas commenté...

    Je bloque en particulier sur ces mystérieuses incantations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    small_black = [block for block in black_blocks if block not in large_black]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lowest = sorted(histogram.items(), lambda a, b: a[1]-b[1])[0][0]
    (vous pourriez aussi m'expliquer l'effet du paramètre 'L' dans la suivante aussi ? Je n'ai pas trouvé de documentation à ce sujet)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char = Image.new('L', [d+2 for d in image.size])
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    greatest_diff = (0, None)
    Pourriez-vous m'expliquer la signification de ces lignes ?

    Merci d'avance !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 054
    Points : 1 385
    Points
    1 385
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    small_black = [block for block in black_blocks if block not in large_black]
    regarde du coté des listes comprehension ou mutation de liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lowest = sorted(histogram.items(), lambda a, b: a[1]-b[1])[0][0]
    sorted (je ne connais pas) semble retour un iterable dont [0][0] est le 1er element du 1er element
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char = Image.new('L', [d+2 for d in image.size])
    faut chercher dans la doc de la lib
    c'est une liste contenant un tuple
    matrice vide de taille number : [[]]*5 ==> [[],[],[],[],[]]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    greatest_diff = (0, None)
    simple tuple
    delete une entrée de la liste black_bloks

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Bonsoir josmiley et merci de m'aider.

    Citation Envoyé par josmiley Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    small_black = [block for block in black_blocks if block not in large_black]
    regarde du coté des listes comprehension ou mutation de liste
    J'ai trouvé ce que c'est sur Wikipédia mais j'aurais besoin d'une explication parce que là je suis un peu largué (quoique je suis peut-être juste fatigué).

    Citation Envoyé par josmiley Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lowest = sorted(histogram.items(), lambda a, b: a[1]-b[1])[0][0]
    sorted (je ne connais pas) semble retour un iterable dont [0][0] est le 1er element du 1er element
    AH ! Je crois que j'ai compris ! D'après la documentation que j'ai trouvée, le second argument, ici "lambda a, b: a[1]-b[1]", doit correspondre à une fonction qui renvoi une valeur négative si le premier argument est plus petit que le second argument, zéro s'il est égal ou une valeur positive s'il est supérieur. Donc en fait "lambda a, b: a[1]-b[1]" se traduit par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int comparer(object[] a, object[] b)
    {
        return a[1] - b[1];
    }
    Si a[1] vaut 5 et b[1] vaut 10, la fonction retournera -5 signifiant a < b, donc la fonction "sorted" triera le contenu de "histogram" selon cette comparaison. Mais pourquoi retourner un tableau de tableaux (object[][]) ?? Dans le code la variable est déclarée comme ceci :
    Ce devrait être un tableau à une seule dimension donc la fonction devrait retourner un tableau trié à une dimension. Notez qu'il utilise des accolades et non des crochets, donc je c'est pas ce que c'est vraiment et c'est peut-être un truc complètement différent finalement...

    Citation Envoyé par josmiley Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char = Image.new('L', [d+2 for d in image.size])
    faut chercher dans la doc de la lib
    J'ai cherché sur cette documentation mais ils ne précisent pas à quoi correspond le 'L' et je ne comprend pas ce que contient vraiment le second paramètre. Si quelqu'un connaît la bibliothèque Image de Python...

    Citation Envoyé par josmiley Voir le message
    c'est une liste contenant un tuple
    matrice vide de taille number : [[]]*5 ==> [[],[],[],[],[]]
    OK.

    Citation Envoyé par josmiley Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    greatest_diff = (0, None)
    simple tuple
    En fait c'est comme un bête tableau ? Du genre "[x,y]" (éventuellement considéré comme un type d'objet différent) ?

    Citation Envoyé par josmiley Voir le message
    delete une entrée de la liste black_bloks
    Sa veut dire "black_blocks[wide] = null" ou carrément que la case est retirée du tableau ?

    En bonus track je rajoute la ligne suivante :
    -1 ?? Les index de tableaux ne commencent pas forcément à zéro ?

    Aaaaah, j'aime pas trop les serpents mais à cette allure ça va devenir chronique...

  4. #4
    Membre extrêmement actif
    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
    Points : 1 658
    Points
    1 658
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    small_black = [block for block in black_blocks if block not in large_black]
    construit une liste avec tous les éléments de black_blocks à condition qu'ils ne soient pas dans large_black

    C'est une autre façon d'écrire la suite d'instructions suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    small_black = []
    for block in black_blocks:
        if block not in large_black:
            small_black.append(block)
    La list comprehension est plus concise, mais surtout il y a sans doute derrière une manière de construire la liste un peu différente, et au final la list comprehension est plus rapide que son équivalent multi-lignes.

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 478
    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 478
    Points : 9 278
    Points
    9 278
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Quelques compléments.

    Python dispose de plusieurs sortes de groupement de données:

    liste: L=[1,2,3]
    tuple: T=(1,2,3)
    dictionnaire: D={'a':12, 'b':82, 'c':45}

    Contrairement à d'autres langages, ces groupements peuvent contenir n'importe quoi, être hétérogènes et même être redéfinis pendant l'exécution: L=[3,"toto",True,6.12e3,complex(5,9),('x','y'), [78,[85,7]]]. On peut donc avoir des listes de listes, des listes de tuples, des tuples de listes, etc...

    L'avantage principal de la liste c'est qu'elle est modifiable, contrairement au tuple.

    L'avantage principal du dictionnaire, c'est que les clés sont "hashées", ce qui permet de retrouver la valeur d'une clé très rapidement.

    "sorted(liste)" est effectivement une fonction de tri qui a l'avantage de renvoyer la liste triée, au contraire de liste.sort() qui trie la liste "sur place" sans rien renvoyer.

    Sa fonction lambda est effectivement une fonction de comparaison, et permet ici de trier selon la 2ème valeur de chaque élément.

    "histogram" est un dictionnaire (=accolades) composé de couples "clé:valeur", comme par exemple: {'a':12, 'b':82, 'c':45}. Par contre, "histogram.items()" convertit ce dictionnaire en liste de tuple, chaque tuple étant un couple (clé,valeur): [('a', 12), ('c', 45), ('b', 82)]. Donc, la fonction de tri sorted() trie ici cette liste selon la valeur des clés.

    Et une fois triée, cette liste de tuple fait l'objet d'une extraction avec [0][0]: lowest a donc comme valeur la clé correspondant au 1er tuple après tri.

    del black_blocks[wide]: efface de la liste black_blocks la valeur dont l'indice est wide. Par exemple, si black_blocks=[1,2,3,4,5] et wide=3, le résultat sera: black_blocks=[1,2,3,5].

    Les listes commencent toutes à l'indice 0. Par contre, quand l'indice est négatif, Python ajoute la longueur de la liste pour trouver le vrai indice positif. Ainsi, L[-1] correspond au dernier élément de la liste (indice=len(L)-1), et L[-2] à l'avant dernier (etc...): c'est très pratique. Python est très doué pour manipuler des listes.

    Tyrtamos

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 054
    Points : 1 385
    Points
    1 385
    Par défaut
    pour la question sur Image.new()
    regarde ici à la page 2 les modes sont expliqués
    http://www.google.fr/url?sa=t&source...xShWv_duv20ltg

  7. #7
    Membre extrêmement actif
    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
    Points : 1 658
    Points
    1 658
    Par défaut
    Le mot 'tableau' se traduit en anglais par 'array','table','roll','list'.

    Je ne me souviens pas avoir rencontré les termes 'array','table','roll' dans les docs anglaises pour désigner des structures de données Python.

    J'estime donc que l'emploi du terme 'tableau' pour désigner des structures de données Python doit être banni car cela n'apporte que de l'imprécision ou pire de la confusion.



    Par exemple, quand tu écris
    Ce devrait être un tableau à une seule dimension donc la fonction devrait retourner un tableau trié à une dimension.
    aucun Pythonien ne comprend qu'il s'agit d'un dictionnaire. On ne comprend ce dont tu parles que parce que ces lignes sont précédées de: histogram = {}


    De même,
    En fait c'est comme un bête tableau ? Du genre "[x,y]" (éventuellement considéré comme un type d'objet différent) ?
    on ne comprend pas qu'il s'agit d'un tuple.
    Un tuple (x,y) est effectivement du même genre qu'une liste [x,y] en ce sens que ces deux structures de données sont toutes deux des collections. Mais leur différence n'est pas du tout éventuelle, elle est fondamentale: une liste est mutable tandis qu'un tuple et immutable (ou immuable).



    On rencontre par contre ici ou là dans les docs anglaises les termes 'collection' ou 'sequence' ou 'container' ou 'iterable' utilisés pour désigner globalement plusieurs structures de données à la fois, dans des sens qui sont plus précis que je ne le pensais: en consultant la page suivante, on s'aperçoit que chacun de ces termes désigne une structure de données possédant une méthode précise: les containers comportent __contains__() ,etc.
    http://docs.python.org/library/collections.html









    Le terme 'array', c'est à dire 'tableau', est utilisé à profusion dans le module numpy. C'est pourquoi je parlais plus haut de confusion car en lisant ce terme, on ne sait jamais si quelqu'un veut parler à tort d'une structures de données habituelle ou s'il se place dans le cadre de numpy.

    Mais les tableaux ne sont pas le seul type de structure de données dans numpy.

    Quoiqu'il en semble d'après l'apparence visuelle des tableaux quand il sont de dimension 2, les tableaux numpy ne sont pas des matrices au sens mathématique, c'est à dire qu'il ne supportent pas les opérations caractéristiques des matrices.
    Les tableaux numpy supportent des «element-wise operations» (je ne me risque pas à traduire) tandis que les matrices supportent les opérations de l'algèbre linéaire.

    Pour combler cette différence, il y a en fait deux classes dans numpy: la classe array et la classe matrix. Les instances de la classe matrix sont exclusivement de dimension 2, elles supportent les opérations d'algèbre linéaire.
    Plus de détails ici:
    http://www.scipy.org/NumPy_for_Matlab_Users

    Comme pour le terme de 'tableau' ou 'array', on ne rencontre aussi jamais le terme de 'matrice' dans Python. Voilà pourquoi il est n'est pas moins condamnable d'employer le terme de 'matrice' que celui de 'tableau' dans le cadre de codes exclusivement Python.

    D'ailleurs s'il est possible d'écrire [[]]*5 en Python, cela n'a aucun sens correspondant en mathématique: il n'existe pas de matrice dénuée de tout élément.
    De même, si [[]]*5 est censé être une matrice, 4*[[8]] devrait en être une aussi; or en Python 4*[[8]] est [[8], [8], [8], [8]] et non pas [[32]] comme on s'y attendrait de la part d'une opération linéaire sur une matrice.




    « On ne peut perfectionner la science sans perfectionner le langage »
    Lavoisier.

  8. #8
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 478
    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 478
    Points : 9 278
    Points
    9 278
    Billets dans le blog
    6
    Par défaut
    Concernant l'astuce x=[[]]*5 ==> [[],[],[],[],[]], il faut avoir conscience qu'elle a des effets de bord assez dangereux.

    On a l'impression qu'on a construit une liste de listes, mais les éléments ne sont pas indépendants.

    Par exemple, l'élément d'indice 1 étant un liste vide, je devrais pouvoir y introduire une valeur (5 par exemple) avec:

    Je devrais obtenir:

    Mais j'obtiens en fait:

    Pour moi, cela condamne définitivement cette astuce. Je préfère:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x=[[] for i in xrange(0,5)]
    qui n'a pas cet inconvénient.

    Tyrtamos

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Merci à tous pour votre super aide !

    Je commence enfin à entrevoir le bout du tunnel. Et ma phobie des serpents diminue, sisi.

    J'ai juste un doute sur cette liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [d+2 for d in image.size]
    Supposons :
    Le résultat sera-t'il le contenu de la liste avec +2 à chaque élément, soit [3,4,5] ?

    Enfin désolé d'utiliser le mot "tableau" alors qu'il n'est visiblement pas adapté à ce langage, je ne connaissais pas assez Python pour le savoir. Dans les langages que je connais, un tableau à un sens très précis, à savoir de base (certains langages son plus souple) une collection de taille fixe, constituée d'éléments modifiables d'un type précis, et stockée en mémoire de manière contigu. C'est importants au niveau des performances, car on peut alors calculer l'adresse d'un élément par un bête "adresseTableau + tailleType * numeroElemRecherché", alors que dans une liste chaînée par exemple, il faut lire le premier élément contenant l'adresse du second, puis lire le second élément contenant l'adresse du troisième, etc...

    Mais Python semble plutôt utiliser une philosophie "voilà ce que je veut faire, je laisse le langage décider comment le faire" et "tout les chemins mènent à Rome". Quand on s'y connaît c'est sûrement bien (plus compact, du coup moins de risque d'erreur bête...) mais vous imaginez pas les conséquences catastrophiques que ça peut avoir sur un débutant en Python qui tombe sur le code d'un habitué. Obligé d'apprendre 36 manières d'écrire différemment la même chose.

  10. #10
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 478
    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 478
    Points : 9 278
    Points
    9 278
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Cyberstein Voir le message
    Le résultat sera-t'il le contenu de la liste avec +2 à chaque élément, soit [3,4,5] ?
    Oui!

  11. #11
    Membre extrêmement actif
    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
    Points : 1 658
    Points
    1 658
    Par défaut
    désolé d'utiliser le mot "tableau"
    Y a pas de mal. L'essentiel pour moi est que si je ne raconte pas trop de bêtises, ce qui doit être le cas puisque personne n'a encore corrigé ce que j'ai écrit, on ait aussi le nécessaire souci du mot juste pour éviter des salmigondis. Je tâche de faire de même avec le vocabulaire des autres langages.



    J'ai relu ceci, qui peut expliquer le halo de brume qui entoure le mot tableau pour certains en Python:
    Une liste en Python est comme un tableau Perl. En Perl, les variables qui stockent des tableaux débutent toujours par le caractère @, en Python vous pouvez nommer votre variable comme bon vous semble et Python se chargera de la gestion du typage.

    Une liste Python est bien plus qu'un tableau en Java (même s'il peut être utilisé comme tel si vous n'attendez vraiment rien de mieux de la vie). Une meilleure analogie serait la classe ArrayList, qui peut contenir n'importe quels objets et qui croît dynamiquement au fur et à mesure que de nouveaux éléments y sont ajoutés.

    http://diveintopython.adrahon.org/na...pes/lists.html
    Pourtant, le fait qu'une liste Python n'est pas un tableau Java montre bien que la signification du terme est langage-dépendante.





    Merci pour la définition du terme tableau dans d'autres langages, je n'avais pas pris la peine jusqu'à présent de creuser la question.
    Peux tu nous indiquer les langages auxquels tu penses en écrivant
    « Dans les langages que je connais, un tableau à un sens très précis,...»





    Mais Python semble plutôt utiliser une philosophie "voilà ce que je veut faire, je laisse le langage décider comment le faire" et "tout les chemins mènent à Rome".
    Je ne comprends pas bien ce que tu veux dire.
    Il me semble que le langage ne décide rien, mais que les listes, les dictionnaires, les tuples, les ensembles sont aptes à avoir des éléments de type quelconque. Leurs implémentations ont été faites pour les rendre tels.
    Si tu as l'impression que Python décide de certaines choses, c'est peut être parce les objets ne sont pas dans des variables mais qu'ils sont repérés par des références et que Python a un typage dynamique: en changeant d'objet qu'il référence, un nom de référence peut repèrer successivement des objets de types différents. C'est bien une caractéristique omniprésente du langage , mais pas une disposition dépendant des objets désignés.



    PS

    Bien vu , Tyrtamos.
    Caractéristique essentielle à préciser, en effet.
    Elle est liée au fait qu'une instruction comme 5%[[]] crée une copie de références et non pas une copie d'objets distincts du départ.
    Pour autant que j'aie bien compris la différence entre copy() et deepcopy().

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Oui!
    Merveilleux ! \o/ Je peut donc considérer la question comme résolue. Jusqu'au prochain morceau de code que je ne comprendrais pas.

    Citation Envoyé par eyquem Voir le message
    Merci pour la définition du terme tableau dans d'autres langages, je n'avais pas pris la peine jusqu'à présent de creuser la question.
    Peux tu nous indiquer les langages auxquels tu penses en écrivant
    « Dans les langages que je connais, un tableau à un sens très précis,...»
    C/C++, C# et Java appliquent cette approche. Après comme je le disais, certains langages ont des tableaux plus souples comme sur PHP où ils stockent des types hétérogènes et grandissent au fur et à mesure qu'on insère une valeur. Mais à partir de là ce sont plus des imitations de tableaux qu'autre chose (ils le disent eux-même dans la documentation).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tab[0] = 1;
    $tab[1] = "texte";
    Ce code crée donc un 'tableau' contenant un vrai entier 1 et une chaîne "texte", et sans contrainte de type ou de taille (ce qui aura pour effet de complexifier les opérations de parcours/modification de son contenu, et donc de diminuer l'optimisation possible derrière). On peut même écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tab["ma valeur"] = 1;
    $tab["mon texte"] = "texte";
    Citation Envoyé par eyquem Voir le message
    Je ne comprends pas bien ce que tu veux dire.
    Il me semble que le langage ne décide rien, mais que les listes, les dictionnaires, les tuples, les ensembles sont aptes à avoir des éléments de type quelconque. Leurs implémentations ont été faites pour les rendre tels.
    Je pense que je me suis un peu mal exprimé. Pour reprendre la "compréhension de liste" de Python, disons qu'on écrit plutôt en Python, comme tu le disais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    small_black = [block for block in black_blocks if block not in large_black]
    Pour "je veut une liste avec tous les éléments de black_blocks à condition qu'ils ne soient pas dans large_black", le langage (comprendre ici le compilateur qui lit le source) se débrouillant derrière pour créer les boucles et tests nécessaires, que des instructions précises comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    small_black = []
    for block in black_blocks:
        if block not in large_black:
            small_black.append(block)
    Bon bien sûr on peut considérer aussi que ce sont des mot-clés aussi bêtes qu'un "while" de C ou le plus compliqué "event" de C#, mais c'est quand même l'impression que ça me donne. Après peut-être que c'est juste parce c'est la 1ère fois que je vois cette construction.

  13. #13
    Membre extrêmement actif
    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
    Points : 1 658
    Points
    1 658
    Par défaut
    Merci.


    Les tableaux PHP sont donc l'équivalent des dictionnaires en Python.

    Ils ont en commun d'avoir des valeurs de types quelconques.

    Mais le dictionnaire Python est plus polyvalent: contrairement au tableau PHP qui ne peut avoir que des entiers ou des chaînes comme clés, un dictionnaire Python peut avoir des clés de type quelconque: entier, chaîne, fonction, classe, tuple, liste, dictionnaire, etc.

    Ainsi, une clé de tableau PHP contient elle une seule donnée, si bien qu'on peut associer à un tableau PHP une représentation graphique de données appelées tableau à une entrée;

    tandis que la représentation graphique de données associable à un dictionnaire peut être, selon le type des clés, un tableau à 1 ou 2 ou multiples entrées.

    Cf http://fr.math.wikia.com/wiki/Utilisation_de_tableaux











    Pour les list comprehension, je pense que l'implémentation de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    small_black = [block for block in black_blocks if block not in large_black]
    ne donne pas lieu à des processus équivalents à une suite d'instructions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    small_black = []
    for block in black_blocks:
        if block not in large_black:
            small_black.append(block)
    1) les list comprehension sont plus rapides
    2) une list comprehension ne peut pas comporter d'instruction d'affectation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    li = [23,34,2,35,7,198,6,45,67,49,77,356,9]
    lo = [ li[i] = 0 for i in xrange(len(li)) if li[i]%2==0]
    n'est pas acceptée.

    n%2 est simplement le modulo de n par 2, c'est à dire le reste de la division euclidienne de n par 2. n%2==0 détecte les nombres pairs

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par eyquem Voir le message
    Merci.
    De rien.

    Citation Envoyé par eyquem Voir le message
    si bien qu'on peut associer à un tableau PHP une représentation graphique de données appelées tableau à une entrée;
    Wow ! Il est temps de marquer une pause avec la programmation.

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

Discussions similaires

  1. Demande d'aide pour extraire des données Excel à l'aide python
    Par userinfo dans le forum Général Python
    Réponses: 5
    Dernier message: 05/01/2013, 11h45
  2. Aide pour comprendre la syntaxe d'une macro
    Par virtuadrack dans le forum C
    Réponses: 6
    Dernier message: 28/10/2009, 12h38
  3. aide pour comprendre des Script perl
    Par la_star160 dans le forum Langage
    Réponses: 2
    Dernier message: 17/07/2008, 20h40
  4. demande d'aide pour comprendre une requete SQL
    Par Halloula dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/04/2008, 18h14

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