# Programmation Python/Ensembles
## Partie 1 - Introduction

* Avant-propos à l'attention des non-programmeurs
* Introduction
* Installation
* Éditeurs
* Programmer en deux minutes
** une messagerie instantanée
** un programme interfacé avec Wikipédia
** un serveur Web

## Partie 2 - Le langage

* Afficher un texte
* Structure d'un programme
* Variables
* Opérateurs
* Structures de contrôle
* Instructions répétitives
* Types
** Numériques
** Booléens
** Chaines de caractères
** Listes
** Tuples
** Dictionnaires
** Dates
** Ensembles
* Fonctions
* Modules
* Exercices
** Palindrome
* Regex
* Programmation orientée objet pour les non-programmeurs
* Classes
* Classes et Interfaces graphiques
* Fichiers
* Exceptions
* Bases de données
** Gestion
* L'interface CGI
* Applications web
* Réseau
* Threads

## Partie 3 - Les bibliothèques

* Bibliothèques pour Python
* L'interface graphique
* Utilisation de fenêtres et de graphismes
** Tkinter
** Widgets
** Turtle
* Les threads
* XML
* JSON
* Tests
* Analyse statique de programmes
* Fabric
* Le Web
** Django
** Karrigell
** Aiohttp

## Partie 1 - Introduction

* Avant-propos à l'attention des non-programmeurs
* Introduction
* Installation
* Éditeurs
* Programmer en deux minutes
** une messagerie instantanée
** un programme interfacé avec Wikipédia
** un serveur Web

## Partie 2 - Le langage

* Afficher un texte
* Structure d'un programme
* Variables
* Opérateurs
* Structures de contrôle
* Instructions répétitives
* Types
** Numériques
** Booléens
** Chaines de caractères
** Listes
** Tuples
** Dictionnaires
** Dates
** Ensembles
* Fonctions
* Modules
* Exercices
** Palindrome
* Regex
* Programmation orientée objet pour les non-programmeurs
* Classes
* Classes et Interfaces graphiques
* Fichiers
* Exceptions
* Bases de données
** Gestion
* L'interface CGI
* Applications web
* Réseau
* Threads

## Partie 3 - Les bibliothèques

* Bibliothèques pour Python
* L'interface graphique
* Utilisation de fenêtres et de graphismes
** Tkinter
** Widgets
** Turtle
* Les threads
* XML
* JSON
* Tests
* Analyse statique de programmes
* Fabric
* Le Web
** Django
** Karrigell
** Aiohttp
[ Modifier le sommaire ]

## Définition

En Python, les ensembles sont définis par le mot "set" depuis Python 2.3, d'abord en important le module du même nom, puis depuis nativement Python 2.6, avec "frozenset".
Un ensemble est une collection non ordonnée d'objets, contrairement aux séquences comme les listes et les tuples dans lesquels chaque élément est indexé. Un ensemble ne peut pas contenir de doublon : on ne peut y trouver des éléments que zéro ou une fois. Tous les membres d'un ensemble doivent être hachable, comme les clés des dictionnaires. À titre d'exemple, les scalaires comme les entiers, flottants, tuples, et chaînes sont hachables ; par contre les dictionnaires, listes, et ensembles ne le sont pas.
Exemple :

## Construction d'ensembles

Une première méthode consiste à fournir un objet séquentiel en paramètre :
Ajout de chaque membre un par un :
Ajout de groupes de membres :
Ajout par copie d'un autre ensemble :

## Recherche de membre

Pour chercher si un élément existe dans un ensemble, on utilise "in" :
Si un sous-ensemble existe dans un ensemble, c'est "issubset" :
Si un sur-ensemble contient un ensemble, c'est "issuperset" :

## Retrait de membre

Il existe quatre fonctions pour retirer des membres à un ensemble :
* "pop" : retire un membre non précisé.
* "remove" : retire le membre existant précisé.
* "discard" : retire un membre précisé.
* "clear" : retire tous les éléments.

## Itération des ensembles

Les éléments n'étant pas ordonnés, il n'y a qu'une boucle possible :

## Opérations sur les ensembles

Python offre les mêmes opérations sur les ensembles qu'en mathématiques, applicables par soit par des opérateurs, soit par des fonctions équivalentes. Les fonctions dont le nom se termine par _update modifie l'ensemble qui devient le résultat et ne retourne rien au lieu de retourner le résultat.

### Intersection

Les éléments communs à deux ensembles.

### Union

Somme des éléments de deux ensembles.

### Différence symétrique

Éléments contenu dans un seul ensemble à la fois, parmi deux. autrement : [ l'union des deux #set] -[l'intersection]

### Différence

Éléments non contenu dans un des deux ensembles.

## Opérations non binaires

Depuis Python 2.6, les fonctions vues précédemment acceptent plus de deux arguments :
* .intersection
* .union
* .symmetric_difference
* .difference.
Un appel à plus de deux arguments est équivalent à des appels enchaînés à deux arguments, ou un argument dans le cas d'un appel de méthode sur une instance.
Exemple :

## frozenset

Un "frozenset" (ensemble figé) se comporte comme un ensemble, sauf qu'il est immutable, c'est-à-dire qu'une fois créé, on ne peut pas le mettre à jour. Il dispose donc des mêmes fonctions que le type "set", mais sans "add", "update", "pop", "remove", "discard" et "clear".
De plus, ils sont hachables, ce qui leur permet de faire partie d'ensembles.
Les instructions suivantes montrent que les méthodes modificatrices sont absentes de la classe frozenset :

## Exercices

* Créer un set {'cat', 1, 2, 3}, appelé "s".
* Créer un set {'c', 'a', 't', '1', '2', '3'}.
* Créer un frozen set {'cat', 1, 2, 3}, appelé "fs".
* Créer un set contenant {frozenset({'cat', 2, 3, 1})}.

## Références

* ↑ https://docs.python.org/2/library/stdtypes.html#set
* Python Tutorial, section "Data Structures", subsection "Sets" -- python.org
* Python Library Reference on Set Types -- python.org
* PEP 218 -- Adding a Built-In Set Object Type, python.org, a nice concise overview of the set type