Construire des ensembles
list() : construire une liste
list() crée une liste à partir d'un itérable, ou une liste vide sans argument.
À partir d'une liste existante, elle crée une copie superficielle : les objets contenus dans les listes sont les mêmes.
Equivalent en C#
List<char> letters = "ABC".ToList();
List<int> numbers = Enumerable.Range(0, 3).ToList();
List<int> copy = new List<int>(numbers);
Le type List<T> est générique et contient des éléments de type T. Une liste Python peut mélanger plusieurs types.
tuple() : construire un tuple
tuple() construit une séquence dont les éléments ne peuvent pas être remplacés, ajoutés ou supprimés.
Un tuple peut néanmoins contenir un objet mutable, comme une liste.
Equivalent en C#
(int X, int Y) coordinates = (10, 20);
Console.WriteLine(coordinates.X); // 10
coordinates.X = 30; // Autorisé avec ValueTuple
Tuple<int, int> fixedPair = Tuple.Create(10, 20);
Un tuple Python est une séquence de longueur quelconque. Les tuples C# ont des types de champs définis. Les tuples ValueTuple sont des types valeur mutables et System.Tuple expose des éléments en lecture seule.
dict() : construire un dictionnaire
dict() crée des associations entre des clés et des valeurs. Les clés doivent être hachables.
product = dict(name="Clavier", price=69.90)
pairs = dict([("language", "Python"), ("version", 3)])
print(product["name"]) # Clavier
Les dictionnaires conservent l'ordre d'insertion des clés.
Equivalent en C#
var product = new Dictionary<string, object>
{
["name"] = "Clavier",
["price"] = 69.90
};
Console.WriteLine(product["name"]); // Clavier
Dictionary<TKey, TValue> est l’équivalent courant. Un comparateur .NET définit l’égalité et le hachage des clés. Python garantit l’ordre d’insertion des dictionnaires ; ne supposons pas que cette garantie fait partie du contrat de Dictionary<TKey, TValue>.
set() : construire un ensemble
set() permet de créer une collection d'éléments distincts et hachables. Elle ne garantit pas d'ordre d'itération.
Un ensemble vide s'écrit set() et {} construit un dictionnaire vide.
Equivalent en C#
var numbers = new HashSet<int>(new[] { 3, 1, 3, 2 });
Console.WriteLine(string.Join(", ", numbers.OrderBy(n => n))); // 1, 2, 3
Le type HashSet<T> élimine les doublons et propose des opérations ensemblistes très performantes.
frozenset() : construire un ensemble immuable
frozenset() construit un ensemble qui ne peut plus être modifié. Il est lui-même hachable et peut servir de clé de dictionnaire.
permissions = frozenset(["read", "write", "read"])
print(len(permissions)) # 2 var "read" apparaît deux fois
print("read" in permissions) # True
Equivalent en C#
var permissions = new[] { "read", "write", "read" }.ToFrozenSet();
Console.WriteLine(permissions.Count); // 2
Console.WriteLine(permissions.Contains("read")); // True
Le type FrozenSet<T> (à partir de .NET 8+) est un ensemble de données / d'objets construit une fois, puis optimise les recherches.