IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Les bases de la programmation Python par l’exemple


précédentsommairesuivant

VIII. Les types de données : séquence, ensemble et dictionnaire

Nous avons déjà vu des types de séquences dans les chapitres précédents - chaînes, intervalles et listes. Le tuple est un autre type de séquence.
Nous verrons plus d'opérations sur les chaînes suivies par tuple, les ensembles et les dictionnaires dans ce chapitre.

VIII-A. Chaînes

  • L’indexation que nous avons vue pour les listes peut aussi bien être appliquée pour les chaînes.

    • Comme les chaînes sont non réinscriptibles, elles ne peuvent pas être modifiées comme des listes.
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
>>> book = "Alchemist"
>>> book[0]
'A'
>>> book[3]
'h'
>>> book[-1]
't'
>>> book[10]
Traceback (dernier appel passé):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
 
>>> book[2:6]
'chem'
>>> book[:5]
'Alche'
>>> book[5:]
'mist'
>>> book[::-1]
'tsimehclA'
>>> book[:]
'Alchemist'
 
>>> list(book)
['A', 'l', 'c', 'h', 'e', 'm', 'i', 's', 't']
 
>>> import string
>>> string.ascii_lowercase[:10]
'abcdefghij'
>>> list(string.digits)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
  • Boucles sur chaînes.
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
>>> book
'Alchemist'
 
>>> for char in book:
...     print(char)
... 
A
l
c
h
e
m
i
s
t
  • Autres opérations.
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
>>> book
'Alchemist'
 
>>> len(book)
9
 
>>> book.index('A')
0
>>> book.index('t')
8
 
>>> 'A' in book
True
>>> 'B' in book
False
>>> 'z' not in book
True
 
>>> min('zealous')
'a'
>>> max('zealous')
'z'

VIII-B. Tuples

  • Les tuples sont similaires aux listes, mais ils sont non réinscriptibles et aussi utiles d’autres façons.
  • Les éléments individuels sont à la fois mutables et immuables.
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
>>> north_dishes = ('Aloo tikki', 'Baati', 'Khichdi', 'Makki roti', 'Poha')
>>> north_dishes
('Aloo tikki', 'Baati', 'Khichdi', 'Makki roti', 'Poha')
 
>>> north_dishes[0]
'Aloo tikki'
>>> north_dishes[-1]
'Poha'
>>> north_dishes[6]
Traceback (Dernier appel passé):
  File "<stdin>", line 1, in <module>
IndexError: Indice tuple hors limites
 
>>> north_dishes[::-1]
('Poha', 'Makki roti', 'Khichdi', 'Baati', 'Aloo tikki')
 
>>> north_dishes[0] = 'Poori'
Traceback (Dernier appel passé):
  File "<stdin>", line 1, in <module>
TypeError: L’objet tuple ne prend pas en charge l’attribution d’élément
  • Exemple d’opérations.
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
>>> 'roti' in north_dishes
False
>>> 'Makki roti' in north_dishes
True
 
>>> len(north_dishes)
5
 
>>> min(north_dishes)
'Aloo tikki'
>>> max(north_dishes)
'Poha'
 
>>> for dish in north_dishes:
...     print(dish)
... 
Aloo tikki
Baati
Khichdi
Makki roti
Poha
  • Un tuple est pratique pour l’affectation de plusieurs variables et le renvoi de plus d’une valeur dans des fonctions.

    • Nous avons déjà vu un exemple expliquant quand utiliser « enumerate » pour parcourir des listes.
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
>>> a = 5
>>> b = 20
>>> a, b = b, a
>>> a
20
>>> b
5
 
>>> c = 'foo'
>>> a, b, c = c, a, b
>>> a
'foo'
>>> b
20
>>> c
5
 
>>> def min_max(arr):
...     return min(arr), max(arr)
... 
>>> min_max([23, 53, 1, -34, 9])
(-34, 53)
  • L’utilisation de () n’est pas toujours nécessaire.
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
>>> words = 'day', 'night'
>>> words
('day', 'night')
 
>>> coordinates = ((1,2), (4,3), (92,3))
>>> coordinates
((1, 2), (4, 3), (92, 3))
 
>>> prime = [2, 3, 5, 7, 11]
>>> prime_tuple = tuple((idx + 1, num) for idx, num in enumerate(prime))
>>> prime_tuple
((1, 2), (2, 3), (3, 5), (4, 7), (5, 11))
  • Convertir d’autres types en tuples.

    • Similaire à list().
 
Sélectionnez
1.
2.
3.
4.
5.
6.
>>> tuple('books')
('b', 'o', 'o', 'k', 's')
 
>>> a = [321, 899.232, 5.3, 2, 1, -1]
>>> tuple(a)
(321, 899.232, 5.3, 2, 1, -1)
  • Les types de données peuvent être mélangés et utilisés en différentes façons.
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
>>> a = [(1,2), ['a', 'b'], ('good', 'bad')]
>>> a
[(1, 2), ['a', 'b'], ('good', 'bad')]
 
>>> b = ((1,2), ['a', 'b'], ('good', 'bad'))
>>> b
((1, 2), ['a', 'b'], ('good', 'bad'))

VIII-C. Ensemble

  • L’ensemble est une collection non ordonnée d’objets.
  • Il possède un type de données mutable.
  • Il est typiquement utilisé pour maintenir une séquence unique, effectuer des opérations d’ensemble comme l’intersection, l’union, la différence, la différence symétrique, etc.
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
>>> nums = {3, 2, 5, 7, 1, 6.3}
>>> nums
{1, 2, 3, 5, 6.3, 7}
 
>>> primes = {3, 2, 11, 3, 5, 13, 2}
>>> primes
{2, 3, 11, 13, 5}
 
>>> nums.union(primes)
{1, 2, 3, 5, 6.3, 7, 11, 13}
 
>>> primes.difference(nums)
{11, 13}
>>> nums.difference(primes)
{1, 6.3, 7}
  • Exemples d’opérations.
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
>>> len(nums)
6
 
>>> nums[0]
Traceback (Dernier appel passé):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
 
>>> book
'Alchemist'
>>> set(book)
{'i', 'l', 's', 'A', 'e', 'h', 'm', 't', 'c'}
>>> set([1, 5, 3, 1, 9])
{1, 9, 3, 5}
>>> list(set([1, 5, 3, 1, 9]))
[1, 9, 3, 5]
 
>>> nums = {1, 2, 3, 5, 6.3, 7}
>>> nums
{1, 2, 3, 5, 6.3, 7}
>>> nums.pop()
1
>>> nums
{2, 3, 5, 6.3, 7}
 
>>> nums.add(1)
>>> nums
{1, 2, 3, 5, 6.3, 7}
 
>>> 6.3 in nums
True
 
>>> for n in nums:
...     print(n)
... 
1
2
3
5
6.3
7

VIII-D. Dictionnaire

  • Les types « dict » peuvent être considérés comme une liste non ordonnée du key:value ou une liste nommée d’éléments.
  • Jusqu’à Python v3.5 (et quelques implémentations de la version 3.6), il était inutile de conserver l’ordre d’insertion des éléments « dict ».
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
>>> marks = {'Rahul' : 86, 'Ravi' : 92, 'Rohit' : 75}
>>> marks
{'Ravi': 92, 'Rohit': 75, 'Rahul': 86}
 
>>> fav_books = {}
>>> fav_books['Fantaisie']   = 'Harry Potter'
>>> fav_books['Détective'] = 'Sherlock Holmes'
>>> fav_books['Thriller'= 'The Da Vinci Code'
>>> fav_books
{'Thriller': 'The Da Vinci Code', 'Fantaisie': 'Harry Potter', 'Détective': 'Sherlock Holmes'}
 
>>> marks.keys()
dict_keys(['Ravi', 'Rohit', 'Rahul'])
 
>>> fav_books.values()
dict_values(['The Da Vinci Code', 'Harry Potter', 'Sherlock Holmes'])
  • Boucle et impression.
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
>>> for book in fav_books.values():
...     print(book)
... 
The Da Vinci Code
Harry Potter
Sherlock Holmes
 
>>> for name, mark in marks.items():
...     print(name, mark, sep=' : ')
... 
Ravi: 92
Rohit: 75
Rahul: 86
 
>>> import pprint
>>> pp = pprint.PrettyPrinter(indent=4)
>>> pp.pprint(fav_books)
{   'Détective' : 'Sherlock Holmes',
    'Fantaisie' : 'Harry Potter',
    'Thriller' : 'The Da Vinci Code'}
  • Modification des dictionnaires et exemple d’opérations.
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
>>> marks
{'Ravi': 92, 'Rohit': 75, 'Rahul': 86}
>>> marks['Rajan'] = 79
>>> marks
{'Ravi': 92, 'Rohit': 75, 'Rahul': 86, 'Rajan': 79}
 
>>> del marks['Ravi']
>>> marks
{'Rohit': 75, 'Rahul': 86, 'Rajan': 79}
 
>>> len(marks)
3
 
>>> fav_books
{'Thriller': 'The Da Vinci Code', 'Fantaisie': 'Harry Potter', 'Détective': 'Sherlock Holmes'}
>>> "fantasy" in fav_books
True
>>> "satire" in fav_books
False
  • « dict » est composé de listes et utilise un module aléatoire.
  • Tout changement dans les listes individuelles va renvoyer à « dict ».
  • La sortie de la méthode « keys() » doit être changée en types de séquences comme « list » ou « tuple » pour pouvoir passer à « random.choice ».
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
>>> north = ['aloo tikki', 'baati', 'khichdi', 'makki roti', 'poha']
>>> south = ['appam', 'bisibele bath', 'dosa', 'koottu', 'sevai']
>>> west = ['dhokla', 'khakhra', 'modak', 'shiro', 'vada pav']
>>> east = ['hando guri', 'litti', 'momo', 'rosgulla', 'shondesh']
>>> dishes = {'North': north, 'South': south, 'West': west, 'East': east}
 
>>> import random
>>> rand_zone = random.choice(tuple(dishes.keys()))
>>> rand_dish = random.choice(dishes[rand_zone])
>>> print("Essayez '{}' speciality '{}' aujourd’hui".format(rand_zone, rand_dish))
Essayez 'East' speciality 'rosgulla' aujourd’hui
  • À partir de Python v3.7, l’implémentation de « dict » devra conserver l’ordre d’insertion.

    • Quelques implémentations comme la référence CPython implementation pour la version 3.6 conservent aussi l’ordre d’insertion.
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
>>> marks = {'Rahul' : 86, 'Ravi' : 92, 'Rohit' : 75, 'Rajan': 79}
>>> marks
{'Rahul': 86, 'Ravi': 92, 'Rohit': 75, 'Rajan': 79}
 
>>> for name, mark in marks.items():
...     print(f'{name:5s}: {mark}')
... 
Rahul: 86
Ravi : 92
Rohit: 75
Rajan: 79
 
>>> del marks['Ravi']
>>> marks
{'Rahul': 86, 'Rohit': 75, 'Rajan': 79}
 
>>> marks['Ranjit'] = 65
>>> marks
{'Rahul': 86, 'Rohit': 75, 'Rajan': 79, 'Ranjit': 65}

VIII-E. Lecture supplémentaire


précédentsommairesuivant

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2018 Sundeep Agarwal. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.