J'essaie de créer un ensemble d'ensembles en Python. Je ne sais pas comment faire.
En commençant par l'ensemble vide xx
:
xx = set([])
# Now we have some other set, for example
elements = set([2,3,4])
xx.add(elements)
mais je reçois
TypeError: unhashable type: 'list'
ou
TypeError: unhashable type: 'set'
Est-il possible d'avoir un ensemble d'ensembles en Python?
J'ai affaire à une grande collection d'ensembles et je veux pouvoir ne pas avoir à traiter d'ensembles en double (un ensemble B d'ensembles A1, A2, ...., An "annulerait" deux ensembles si Ai = Aj)
Python se plaint parce que les objets intérieurs set
sont mutables et donc non hachables. La solution consiste à utiliser frozenset
pour les ensembles internes, pour indiquer que vous n'avez pas l'intention de les modifier.
Les gens ont déjà mentionné que vous pouvez le faire avec un frozenset () , donc je vais simplement ajouter un code pour y parvenir:
Par exemple, vous souhaitez créer un ensemble d'ensembles à partir de la liste de listes suivante:
t = [[], [1, 2], [5], [1, 2, 5], [1, 2, 3, 4], [1, 2, 3, 6]]
vous pouvez créer votre set de la manière suivante:
t1 = set(frozenset(i) for i in t)
Utilisez frozenset
à l'intérieur.
J'ai donc eu exactement le même problème. Je voulais créer une structure de données qui fonctionne comme un ensemble d'ensembles. Le problème est que les ensembles doivent contenir des objets immuables. Donc, ce que vous pouvez faire, c'est simplement en faire un ensemble de tuples. Cela a bien fonctionné pour moi!
A = set()
A.add( (2,3,4) )##adds the element
A.add( (2,3,4) )##does not add the same element
A.add( (2,3,5) )##adds the element, because it is different!