Lists - Learn Python 3 - Snakify

Lesson 7
Listes


1. Listes

La plupart des programmes ne fonctionnent pas seulement avec des variables. Ils utilisent également des listes de variables. Par exemple, un programme peut gérer une information sur les étudiants d'une classe en lisant la liste des étudiants à partir du clavier ou d'un fichier. Une modification du nombre d'élèves dans la classe ne doit pas nécessiter de modification du code source du programme.

Auparavant, nous étions déjà confrontés à la tâche de traitement des éléments d'une séquence - par exemple, lors du calcul de l'élément le plus important de la séquence. Mais nous n'avons pas gardé toute la séquence dans la mémoire de l'ordinateur. Cependant, dans de nombreux problèmes, il est nécessaire de conserver toute la séquence, comme si nous devions imprimer tous les éléments d'une séquence dans l'ordre croissant ("trier une séquence").

Pour stocker ces données, en Python vous pouvez utiliser la structure de données appelée list (dans la plupart des langages de programmation, le terme différent est utilisé - "array"). Une liste est une séquence d'éléments numérotés à partir de 0, tout comme les caractères de la chaîne. La liste peut être définie manuellement en énumérant les éléments de la liste entre crochets, comme ici:

Primes = [2, 3, 5, 7, 11, 13]
Rainbow = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet']

La liste Primes a 6 éléments, à savoir: Primes[0] == 2 , Primes[1] == 3 , Primes[2] == 5 , Primes[3] == 7 , Primes[4] == 11 , Primes[5] == 13 . La liste Rainbow a 7 éléments, dont chacun est la chaîne.

Comme les caractères de la chaîne, les éléments de liste peuvent également avoir un index négatif, par exemple, Primes[-1] == 13 , Primes[-6] == 2 . L'index négatif signifie que nous commençons au dernier élément et partons à gauche en lisant une liste.

Vous pouvez obtenir le nombre d'éléments dans une liste avec la fonction len (c'est-à-dire la longueur de la liste ), par exemple len(Primes) == 6 .

Contrairement aux chaînes, les éléments d'une liste sont modifiables; ils peuvent être changés en leur attribuant de nouvelles valeurs.

Rainbow = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet']
print(Rainbow[0])
Rainbow[0] = 'red'
print('Print the rainbow')
for i in range(len(Rainbow)):
    print(Rainbow[i])

Pensez à plusieurs façons de créer et de lire des listes. Tout d'abord, vous pouvez créer une liste vide (la liste sans éléments, sa longueur est 0), et vous pouvez ajouter des éléments à la fin de votre liste en utilisant append . Par exemple, supposons que le programme reçoive le nombre d'éléments dans la liste n , puis n éléments de la liste un par un chacun sur la ligne distincte. Voici un exemple de données d'entrée dans ce format:

5
1809
1854
1860
1891
1925
Dans ce cas, vous pouvez organiser la lecture à partir de cette liste comme suit:
a = [] # démarrer une liste vide
n = int(input()) # lire le numéro de l'élément dans la liste
for i in range(n): 
    new_element = int(input()) # lire l'élément suivant
    a.append(new_element) # l'ajouter à la liste
    # les deux dernières lignes pourraient être remplacées par une:
    # a.append (int (entrée ()))
print(a)

Dans l'exemple démontré, la liste vide est créée, puis le nombre d'éléments est lu, puis vous lisez les éléments de la liste ligne par ligne et vous ajoutez à la fin. La même chose peut être faite, en sauvegardant la variable n :

a = []
for i in range(int(input())):
    a.append(int(input()))
print(a)

Il y a plusieurs opérations définies pour les listes: concaténation de liste (ajout de listes, c'est-à-dire "collage" d'une liste à une autre) et répétition (multiplication d'une liste par un nombre). Par exemple:

a = [1, 2, 3]
b = [4, 5]
c = a + b
d = b * 3
print([7, 8] + [9])
print([0, 1] * 3)

La liste résultante c sera égale à [1, 2, 3, 4, 5] , et une liste de d sera égale à [4, 5, 4, 5, 4, 5] . Cela vous permet d'organiser le processus de listes de lecture différentes: tout d' abord, considérer la taille de la liste et de créer une liste à partir du nombre souhaité d'éléments, puis boucle à travers la variable i commençant par le numéro 0 et à l' intérieur de la boucle lu i -ème élément de la liste:

a = [0] * int(input())
for i in range(len(a)):
    a[i] = int(input())

Vous pouvez imprimer les éléments d'une liste a avec print(a) ; ceci affiche les éléments de liste entourés de crochets et séparés par des virgules. En général, c'est gênant; en commun, vous êtes sur le point d'imprimer tous les éléments d'une ligne ou d'un élément par ligne. Voici deux exemples de cela, en utilisant d'autres formes de boucle:

a = [1, 2, 3, 4, 5]
for i in range(len(a)):
    print(a[i])

Ici, l'index i est modifié, puis l'élément a[i] est affiché.

a = [1, 2, 3, 4, 5]
for elem in a:
    print(elem, end=' ')

Dans cet exemple, les éléments de liste sont affichés dans une ligne séparée par des espaces, et ce n'est pas l'index qui est modifié mais la valeur de la variable elle-même (par exemple, dans la boucle for elem in ['red', 'green', 'blue'] variable elem prendra successivement les valeurs 'red' , 'green' , 'blue' .

Portez une attention particulière au dernier exemple! Une partie très importante de l'idéologie Python est la boucle for , qui fournit le moyen pratique d'itérer sur tous les éléments d'une séquence. C'est là que Python diffère de Pascal, où vous devez parcourir les index des éléments, mais pas les éléments eux-mêmes.

Les séquences en Python sont des chaînes, des listes, des valeurs de la fonction range() (ce ne sont pas des listes), et d'autres objets.

Voici un exemple montrant l'utilisation de la boucle for lorsque vous devez extraire tous les chiffres d'une chaîne et en faire une liste numérique.

# donné: s = 'ab12c59p7dq'
# vous devez extraire les chiffres de la liste s
# pour le faire ainsi:
# chiffres == [1, 2, 5, 9, 7]
s = 'ab12c59p7dq'
digits = []
for symbol in s:
    if '1234567890'.find(symbol) != -1:
        digits.append(int(symbol))
print(digits)
Advertising by Google, may be based on your interests

2. Split et rejoindre les méthodes

Les éléments de liste peuvent être donnés en une ligne séparée par un caractère; dans ce cas, la liste entière peut être lue en utilisant input() . Vous pouvez ensuite utiliser une méthode de chaîne split() , qui renvoie une liste de chaînes résultant de la coupe de la chaîne initiale par des espaces. Exemple:

# l'entrée est une chaîne
# 1 2 3
s = input() # s == '1 2 3'
a = s.split() # a == ['1', '2', '3']
print(a)

Si vous exécutez ce programme avec les données d'entrée de 1 2 3 , la liste a sera égale à ['1', '2', '3'] . S'il vous plaît noter que la liste se composera de chaînes, pas de chiffres. Si vous voulez obtenir la liste des nombres, vous devez convertir les éléments de liste un par un en entiers:

a = input().split()
for i in range(len(a)):
    a[i] = int(a[i])
print(a)

En utilisant la magie spéciale des générateurs Python - la même chose peut être faite en une seule ligne:

a = [int(s) for s in input().split()]
print(a)

(Nous allons vous expliquer comment fonctionne ce code dans la section suivante.) Si vous voulez lire une liste de nombres réels, vous devez changer le type int pour float .

La méthode split() a un paramètre facultatif qui détermine quelle chaîne sera utilisée comme séparateur entre les éléments de la liste. Par exemple, l'appel de la méthode split('.') Renvoie la liste obtenue en divisant la chaîne initiale par le caractère '.' est rencontré:

a = '192.168.0.1'.split('.')
print(a)

En Python, vous pouvez afficher une liste de chaînes en utilisant des commandes d'une ligne. Pour cela, la méthode join est utilisée; cette méthode a un paramètre: une liste de chaînes. Il renvoie la chaîne obtenue par concaténation des éléments donnés, et le séparateur est inséré entre les éléments de la liste; ce séparateur est égal à la chaîne sur laquelle est appliquée la méthode. Nous savons que vous n'avez pas compris la phrase précédente depuis la première fois. :) Regarde les exemples:

a = ['red', 'green', 'blue']
print(' '.join(a))
# retour rouge vert bleu
print(''.join(a))
# retour redgreenblue
print('***'.join(a))
# retourne rouge *** vert *** bleu

Si une liste est composée de nombres, vous devez utiliser la magie noire des générateurs. Voici comment vous pouvez imprimer les éléments d'une liste, séparés par des espaces:

a = [1, 2, 3]
print(' '.join([str(i) for i in a]))
# la ligne suivante provoque une erreur de type,
# comme join () ne peut que concaténer des strs
# print ('' .join (a))

Cependant, si vous n'êtes pas un fan de magie noire, vous pouvez obtenir le même effet en utilisant la boucle for .

Advertising by Google, may be based on your interests

3. Générateurs

Pour créer une liste remplie d'éléments identiques, vous pouvez utiliser la répétition de liste, par exemple:

n = 5
a = [0] * n
print(a)

Pour créer des listes plus compliquées, vous pouvez utiliser des générateurs : les expressions permettant de remplir une liste selon une formule. La forme générale d'un générateur est la suivante:

[expression for variable in sequence]

où la variable est l'ID d'une variable, la sequence est une séquence de valeurs, qui prend la variable (ce peut être une liste, une chaîne de caractères, ou un objet obtenu à l' aide de la fonction range ), expression - une expression, généralement en fonction de la variable utilisé dans le générateur. Les éléments de la liste seront remplis en fonction de cette expression.

Voici quelques exemples de personnes utilisant des générateurs.

Voici comment créer une liste de n zéros en utilisant le générateur:

a = [0 for i in range(5)]
print(a)

Voici comment créer une liste remplie de carrés d'entiers:

n = 5
a = [i ** 2 for i in range(n)]
print(a)

Si vous avez besoin de remplir une liste de carrés de nombres de 1 à n , vous pouvez modifier les paramètres de range à range(1, n + 1) :

n = 5
a = [i ** 2 for i in range(1, n + 1)]
print(a)

Voici comment vous pouvez obtenir une liste remplie de nombres aléatoires de 1 à 9 (en utilisant randrange du module random ):

from random import randrange
n = 10
a = [randrange(1, 10) for i in range(n)]
print(a)

Et dans cet exemple, la liste sera composée de lignes lues depuis l'entrée standard: d'abord, vous devez entrer le nombre d'éléments de la liste (cette valeur sera utilisée comme argument de la range fonctions), ensuite le nombre de chaînes:

a = [input() for i in range(int(input()))]
print(a)
Advertising by Google, may be based on your interests

4. Tranches

Avec les listes et les chaînes, vous pouvez faire des tranches. À savoir:

A[i:j] coupe les éléments ji A[i] , A[i+1] , ..., A[j-1] .

A[i:j:-1] découpe les éléments ij A[i] , A[i-1] , ..., A[j+1] (c'est-à-dire en changeant l'ordre des éléments).

A[i:j:k] coupe avec l'étape k : A[i] , A[i+k] , A[i+2*k] , .... Si la valeur de k <0, les éléments viennent dans l'ordre inverse.

Chacun des nombres i ou j peut être manquant, ce qui signifie "début de ligne" ou "fin de ligne"

Contrairement aux chaînes, les listes sont des objets mutables : vous pouvez affecter un élément de liste à une nouvelle valeur. De plus, il est possible de changer des tranches entières. Par exemple:

A = [1, 2, 3, 4, 5]
A[2:4] = [7, 8, 9]
print(A)

Ici, nous avons reçu une liste [1, 2, 3, 4, 5] , puis nous essayons de remplacer les deux éléments de la tranche A[2:4] par une nouvelle liste de trois éléments. La liste résultante est la suivante: [1, 2, 7, 8, 9, 5] .

A = [1, 2, 3, 4, 5, 6, 7]
A[::-2] = [10, 20, 30, 40]
print(A)

Et ici, la liste résultante sera [40, 2, 30, 4, 20, 6, 10] . La raison en est, A[::-2] est une liste d'éléments A[-1] , A[-3] , A[-5] , A[-7] , et que les éléments sont affectés à 10, 20, 30, 40, respectivement.

Si une tranche discontinue (c'est-à-dire une tranche avec un pas k , k > 1 ) est affectée d'une nouvelle valeur, alors le nombre d'éléments dans l'ancienne et la nouvelle tranche coïncident nécessairement, sinon l'erreur ValueError se produit.

Notez que A[i] est un élément de liste, pas une tranche!

Advertising by Google, may be based on your interests

5. Opérations sur les listes

Vous pouvez facilement faire beaucoup d'opérations différentes avec des listes.

x en A
Vérifiez si un élément de la liste. Retourne Vrai ou Faux
x non en A
La même chose que non (x en A)
min (A)
Le plus petit élément de la liste
max (A)
Le plus grand élément de la liste
A.index (x)
L'indice de la première occurrence de l'élément x dans la liste; en son absence génère une exception ValueError
A.count (x)
Le nombre d'occurrences de l'élément x dans la liste
Advertising by Google, may be based on your interests