0
votes

Comment ajouter () entrée d'exécution dans un ensemble à Python?

problème strong>

J'essaie de ajouter () code> éléments dans un jeu d'exécution à l'aide de A pour boucle: p> xxx Pré>

surprenante, l1 code> est un ensemble mais, quand je vais sur ajouter () code> -ing -ing éléments à mon ensemble l2 code> dans un boucle que je reçois: p>

TypeError: Type indatériel: 'Liste' P> BlockQuote>

Effort de recherche: strong> P>

Voici d'autres moyens d'avoir essayé de Ajouter () code> éléments pour définir l2 et a échoué: p>

{{1,2,3,4,5},{100,11,12}}


8 commentaires

Essayez (int, tuple (entrée.split ())) . Les objets mutables n'ont pas de hashcodes (puisqu'ils changeraient lorsqu'ils changeraient lors de la mutation et il allait briser la manière dont les collections de hasch fonctionnent). SET est implémenté à l'aide d'une hache de base afin qu'il puisse stocker uniquement des éléments immuables (ou au moins: des choses dont l'identité est immuable). Liste S est mutable, je n'ai donc pas de hashcode. Split renvoie également une liste.


Bien sûr, laissez-moi vérifier et revenir en arrière.


I Obtenir: AttributeError: l'objet 'Fonction' n'a aucun attribut 'Split'


Désolé entrée (). Split () La parenthèse manquante était une faute de frappe


J'ai écrit l2.add ((int, tuple (INPUT.SPLIT ())))


J'ai essayé l'autre version et je reçois - TypeError: Type malshable: 'Liste'


Votre production attendue n'est pas possible. SET n'est pas un type valide pour SET membres.


@ Mistermiyagi Je comprends, Mad Physicst a suggéré une approche utilisant le gelenget () qui semble fonctionner pour moi.


3 Réponses :


2
votes

Depuis SET.ADD CODE> A> accepte uniquement comme élément unique, pas un iérent, vous pouvez boucler sur le Carte Code> et ajoutez chaque élément individuellement

l2 = set()
l2.update(*[map(int, input().split()) for i in range(n)])


6 commentaires

Votre approche fonctionne bien. Mais ce que je cherchais était peut-être si je pouvais le faire comme un ensemble d'ensembles.


Comme l'appendez des ensembles avec des entrées d'exécution dans L2. {{....}, {...}, {....}, .... {...}}


J'ai essayé vos modifications et je ne suis toujours pas capable de le voir comme un ensemble d'ensembles. N'hésitez pas à répondre à vos confusions que je suis prêt à vous aider avec cela.


@mishx. Montrer la production attendue dans chaque partie de la question.


J'ai ajouté la sortie attendue


@mishsx. Cela aide plus que la prose. Je suis allé de l'avant et j'ai ajouté une deuxième réponse distincte à votre question.



0
votes

Espérons que cela vous aide.

l1 = set(map(int, input('Enter first set: ').split()))
print(l1)
n = int(input('Enter n: '))
l2 = list()
for i in range(n):
    l2.append(set(set(map(int, input(f'Enter {i + 2}rd set: ').split()))))

print(l2)

# [{1,2,3,4,5},{100,11,12}]
  • en Python, vous ne pouvez pas avoir défini de listes p> li>

  • Utilisez l'opérateur de fusion au lieu d'ajouter p> li>

  • Le {{1,2,3,4,5}, {100,11,12}} code> expression est à la fois mathématiquement et la programmation incorrecte. p> li >

  • Ensemble d'ensembles mathématiquement est l'intersection des ensembles. P> li>

  • Vous pouvez avoir une liste de jeux mais aucun jeu d'ensembles. Donc, l2 code> devrait être la liste non définie.Pe est le code pour créer une liste des ensembles. P> XXX PRE> LI> ul> p>


3 commentaires

Je vais essayer ça maintenant et te laissera savoir


J'apprécie votre solution, mais cela me donne un ensemble avec des éléments consolidés des ensembles que je donne en entrée. J'ai joint une clarification sur mon post. N'hésitez pas à résoudre les doutes que vous avez encore.


Bleu Vous êtes correct sur la partie où il est illogique et mathématiquement de faire un ensemble d'ensembles. Mais avec gelenget (), j'ai pu. J'apprécie votre solution élégante et je vais renvoyer la même chose, car je vais toujours rencontrer dans une affaire pour effectuer une liste des ensembles.



1
votes

Depuis que je réponds maintenant à une question essentiellement différente, je pose une deuxième réponse.

A définir code> est mutable et donc indestible. Les objets mutables peuvent mettre en œuvre une fonction de hachage, mais les intégrés ne doivent généralement pas éviter les problèmes. Au lieu d'utiliser un définir code>, utilisez une hache FROZENSET CODE> Pour vos jeux imbriqués: P>

l2 = set(frozenset(map(int, input().split())) for i in range(n))


4 commentaires

J'essaie de sortir. Vous laissera savoir dans une seconde


Je ne connais pas beaucoup de familier avec Frozenset () mais ma sortie montre comme - {FROZANSET ({1, 2, 3, 4, 5}), gelenget ({11, 100, 12})}


On dirait que chaque élément est différent de l'autre et est un ensemble. Mais ne savez pas pourquoi le mot gelenget écrit en eux


@mishsx. Parce que lorsque vous imprimez un conteneur intégré, il imprime les éléments avec REC . Le REC d'un gelenset est une chaîne qui doit vous permettre de construire l'objet, et contient ainsi le mot gelenset .