156 votes

Comment créer un ensemble d'ensembles en Python?

Je suis assez nouveau à Python.

J'ai fait un peu de recherche en ligne et de lire quelqu'un dire quelque part qu'il est impossible de créer un ensemble de jeux en Python. Est-il un moyen de contourner cela? ie...

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 de jeux en python?

Je fais affaire avec une grande collection de jeux et je veux être capable de ne pas avoir à traiter des ensembles en double (une série B des ensembles A1, A2, ...., Un serait "annuler" deux ensembles si Ai = Aj)

Merci pour beaucoup pour toute aide! Cheers

149voto

a3nm Points 2733

Python se plaint parce que les objets internes set sont modifiables et ne sont donc pas hashable. La solution consiste à utiliser frozenset pour les ensembles internes, pour indiquer que vous n'avez pas l'intention de les modifier.

75voto

Salvador Dali Points 11667

Les gens ont déjà mentionné que vous pouvez faire cela avec un frozenset () , alors je vais juste 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 ensemble de la manière suivante:

 t1 = set(frozenset(i) for i in t)
 

20voto

Utilisez frozenset intérieur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X