Aller au contenu

Générer un tableau avec Python

Un tableau de type list peut être défini en extension (on liste, entre crochets, une à une les valeurs de chacun de ses éléments).
Il existe aussi d'autres méthodes pour définir un tableau.

Générer à l'aide d'une boucle

En partant d'un tableau vide, une boucle for ou while permet d'ajouter un nouvel élément dans le tableau à chaque tour.

Exemple

Pour générer un tableau de 50 entiers de valeurs numériques consécutives à partir de 0 mais alternant entre positifs et négatifs, on peut utiliser le code suivant :

1
2
3
4
tab = []
for i in range(0, 50, 2):   
    tab.append(i)
    tab.append( -(i+1) )

Génération d'entiers successifs

Pour générer le tableau tab des entiers consécutifs de d à f-1, on peut utiliser l'instruction :

1
L = list(range(d, f))

Variante

Pour le tableau tab des entiers consécutifs de d à f-1 avec un pas de p, on peut utiliser l'instruction :

1
L = list(range(d, f, p))

Exemples

  1. Donner l’écriture en extension du tableau A défini par A = list(range(3, 7)).

    Une solution

    Une écriture en extension de A est [3, 4, 5, 6].

  2. Par quelle instruction générer le tableau B défini en extension par [6, 10, 14, 18, 22, 26] ?

    Une solution

    Une définition possible de B est B = list(range(6, 30, 4)).

Définir un tableau en compréhension

On dit qu'un tableau est généré en compréhension lorsqu'il est défini grâce à une propriété caractéristique :

  • [f(x) for x in tab] est le tableau formé des éléments f(x)f() est une fonction et x prend successivement pour valeurs les éléments d'un tableau tab donné.
  • [x for x in tab if condition] est le tableau formé des éléments x d'un tableau tab donné qui respectent la condition (le test) spécifiée.

Exemple

Définir par compréhension le tableau des entiers pairs compris entre 2 et 20 inclus.

1
A = [i for i in range(2, 21) if i%2 == 0]
ou encore :
1
A = [i for i in range(2, 21, 2)]

Définir un tableau d'entiers aléatoires

On fait appel à la fonction randint() du module random de Python :

Rappel

La fonction randint() du module random permet de générer des entiers au hasard.
L'instruction randint(a, b) (a et b sont des entiers tels que a \leqslant b) génère un entier aléatoire compris entre a (inclus) et b (inclus).

Voici un code pour générer un tableau de longueur 10 dont les éléments sont des entiers aléatoires compris entre 0 et 20 :

1
2
from random import randint
tab = [randint(0, 20) for k in range(10)]
Pythonnerie

Dans le code précédent, la variable k n'est pas « utilisée ». Elle sert uniquement de compteur à la boucle Pour. Il est donc possible de la remplacer par n'importe quel caractère, y compris le caractère « underscore » :

1
2
from random import randint
tab = [randint(0, 20) for _ in range(10)]

Exemple

Définir la fonction negatifs() qui prend en paramètre un tableau d'entiers et qui renvoie sous forme de tableau uniquement les nombres négatifs contenus dans le tableau d'origine.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
def negatifs(tab):
    """
    tab – list, tableau d'entiers
    Sortie: list, tableau des nombres négatifs contenus dans tab
    >>> A =  [3, 17, -2, -8, 14, -11, 18, 21, -3]
    >>> B = negatifs(A)
    >>> B
    [-2, -8, -11, -3]
    """
    pass


##----- Programme principal et tests -----##
if __name__ == '__main__':
    import doctest
    doctest.testmod()
Une solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
def negatifs(tab):
    """
    tab – list, tableau d'entiers
    Sortie: list, tableau des nombres négatifs contenus dans tab
    >>> A =  [3, 17, -2, -8, 14, -11, 18, 21, -3]
    >>> B = negatifs(A)
    >>> B
    [-2, -8, -11, -3]
    """
    tab_result = []
    for elt in tab:
        if elt < 0:
            tab_result.append(elt)
    return tab_result
Une autre solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def negatifs(tab):
    """
    tab – list, tableau d'entiers
    Sortie: list, tableau des nombres négatifs contenus dans tab
    >>> A =  [3, 17, -2, -8, 14, -11, 18, 21, -3]
    >>> B = negatifs(A)
    >>> B
    [-2, -8, -11, -3]
    """
    return [elt for elt in tab if elt < 0]