Forum Programmation.python remplacer une tranche d'un array

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
14
fév.
2021

Salutations,

Si j'ai un tableau défini comme suit

a = [0, 0, 0, 0, 0]

Je peux, par exemple, passer à 1 la valeur des 3 derniers éléments avec

a[2:] = [1 for i in range(3)]

Ma question est : existe-t-il une syntaxe équivalente si mon tableau est un array défini par

import array
a = array.array('B', [0, 0, 0, 0, 0]) 

ou est-ce que je suis obligé de faire une boucle et changer les éléments un par un ?

D'avance merci :D

  • # Switch vers numpy

    Posté par  (site web personnel) . Évalué à 2. Dernière modification le 14 février 2021 à 17:19.

    Salut, array est plutôt utilisé pour faire des I/O structurées que de la cuisine où on va modifier ici ou là avec des opérations de haut niveau. Si tu n'a pas de contrainte, il vaut mieux utiliser numpy.

    >>> import numpy as np
    >>> a = np.zeros(5, dtype=np.int8)
    >>> a
    array([0, 0, 0, 0, 0], dtype=int8)
    >>> a[2:] = 1
    >>> a
    array([0, 0, 1, 1, 1], dtype=int8)

    Bon, sinon, tu peux tenter ce genre de choses:

    >>> import array
    >>> a = array.array('B', [0, 0, 0, 0, 0]) 
    >>> a = a[:2] + array.array('B', [1]*3)
    >>> a
    array('B', [0, 0, 1, 1, 1])

    Note: ça ne change pas le array a en place, ça en crée un nouveau…

    Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

    • [^] # Re: Switch vers numpy

      Posté par  . Évalué à 1.

      Merci pour ta réponse. J'utilise array pour simuler la RAM dans un petit "émulateur" Chip8 que je suis en train d'écrire. Sur le moment ça m'a semblé approprié puisque vendu comme plus efficace qu'un bête tableau. Peut-être ai-je fait fausse route.

      Je ne crois pas que Numpy soit fourni en standard avec Python ? Si oui ça peut-être un bonne solution, sinon j'essaye d'éviter à tout prix les dépendances non absolument nécessaires.

      • [^] # Re: Switch vers numpy

        Posté par  (site web personnel) . Évalué à 2. Dernière modification le 14 février 2021 à 19:29.

        Tu as combien d'emplacements dans ta RAM ? Si ça reste raisonnable, dans le cadre d'un simulateur, c'est peut-être pas le peine de t'embêter avec array.

        Sinon, numpy n'est pas dans la lib standard… mais c'est un incontournable dans tout ce qui est calcul scientifique.

        Note pour les listes la syntaxe [valeur] * répétition. Ça fonctionne bien tant que la valeur est un immutable (comme les entiers, flottants, booléens, chaînes…).

        Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

        • [^] # Re: Switch vers numpy

          Posté par  . Évalué à 1.

          4 Ko de RAM pour Chip8, c'est rien du tout, mais comme je fais ça dans l'idée de faire évoluer la plateforme, ça peut finir par monter bien plus haut.

          Mais il faudra que je me pose la question d'utiliser un autre langage de toutes façon dans ce cas.

          Et pour ce projet là en particulier, je préfère vraiment garder le "noyeau" de l'émulateur libre du maximum de contraintes, histoire de pouvoir le porter sur d'autres machines autre qu'un PC de bureau (pourquoi pas téléphones, calculatrices etc.). Je pense que Numpy est un peu overkill, et pas sûr de le retrouver partout.

          Merci pour les conseils en tout cas, je prends note de tout ça :D

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.