Search code examples
pythonsetcomparisonset-theoryfrozenset

Python: frozensets comparison


consider the following script:

# multipleSmallFrozensets is a list of 7 frozensets of differenet number of string objects
multipleSmallFrozensets = [
    frozenset({'YHR007C', 'YHR042W'}),
    frozenset({'YPL274W'}),
    frozenset({'YCL064C'}),
    frozenset({'YBR166C'}),
    frozenset({'YEL041W', 'YJR049C'}),
    frozenset({'YGL142C'}),
    frozenset({'YJL134W', 'YKR053C'})]

# singleFrozenset is a frozenset of 3410 string objects
singleFrozenset = frozenset({'YIL140W','YLR268W','YLR357W','YJL155C','YHR067W',
'YAL008W','YBR255W','YFR027W','YGR148C','YJR122W','YJL204C','YJL093C','YLR244C',
'YNL003C','YBR111W-A', ...})

# don't forget that i is of type frozenset [just saying!]
for i in multipleSmallFrozensets:
      if i <= singleFrozenset: print "First option entered"
      elif len(i) == 1: print "Second option entered"
      else: print "Third option entered"

and the mysterious output is

First option entered
Second option entered
Second option entered
First option entered
Third option entered
First option entered
First option entered

These if-else conditions are checking for two cases a) i <= singleFrozenset, and b) len(i) == 1. The second condition is simple; however, I couldn't figure out the first condition where the cases that matched with are 1, 4, 6, and 7. I couldn't find a link between these frozen sets in these cases! Any idea why?


Solution

  • Set operator <= is equivalent to the .issubset() method. A <= B is true if and only if each element of A also belongs to B.