Python ensemble de l'Union et définir Intersection fonctionner différemment?
Je suis en train de faire quelques opérations en Python, et j'ai remarqué quelque chose de bizarre..
>> set([1,2,3]) | set([2,3,4])
set([1, 2, 3, 4])
>> set().union(*[[1,2,3], [2,3,4]])
set([1, 2, 3, 4])
Que du bon, à un comportement attendu - mais avec de l'intersection:
>> set([1,2,3]) & set([2,3,4])
set([2, 3])
>> set().intersection(*[[1,2,3], [2,3,4]])
set([])
Suis-je perdre mon esprit ici? Pourquoi n'est pas définie.intersection() d'exploitation comme je l'avais prévu pour?
Comment puis-je faire l'intersection de plusieurs ensembles comme je l'ai fait avec l'union (en supposant que le [[1,2,3], [2,3,4]]
avait un tas entier de plus de listes)? Que serait le "pythonic" manière d'être?
Vous devez vous connecter pour publier un commentaire.
Lorsque vous ne
set()
de la création d'un ensemble vide. Lorsque vous neset().intersection(...)
vous êtes à l'intersection de cette ensemble vide avec d'autres trucs. L'intersection d'un ensemble vide avec toute autre collection d'ensembles est vide.Si vous avez une liste de jeux de, vous pouvez obtenir leur intersection similaire à la façon dont vous l'avez fait.
Vous ne pouvez pas le faire directement avec la façon dont vous le faites, cependant, parce que vous n'avez pas tous les ensembles à tous dans votre exemple avec
intersection(*...)
. Vous avez juste une liste de listes. Vous devez d'abord convertir les éléments de votre liste de jeux. Donc, si vous avezque vous devriez faire
est bien sûr vide parce que vous commencez avec l'ensemble vide et se croisent avec tous les autres
Vous pouvez essayer d'appeler la méthode sur le
class
mais qui ne fonctionne pas parce que le premier argument passé doit être un ensemble
Cela a l'air gêné, mieux si vous pouvez utiliser une liste de jeux à la première place. Surtout si elles sont à venir à partir d'un générateur qui le rend difficile à retirer le premier élément proprement
Sinon, vous pouvez simplement faire tous en jeux
convertir la liste de la première
Pour plusieurs listes, vous pouvez simplement utiliser,
set.intersection
est différente deset().intersection
[supprimé réponse incorrecte]
Comme @Anto Vinish suggéré que vous devriez d'abord convertir les listes de jeux et ensuite utiliser.intersection
Par exemple: