On 08/11/2021 21:43, Ethan Furman wrote:
When is an empty container contained by a non-empty container?

For example:
These examples are not at all analogous.  `a in b` has different meanings for different classes of b.

{} in {1:'a', 'b':2]   <-- TypeError because of hashability
`x in aDict` means `x in aDict.keys()`
1 in {1:'a', 'b':2} == True
'a' in {1:'a', 'b':2} == False

set() in {1, 2, 'a', 'b'}  <-- ditto
[] in ['a', 'b', 1, 2]  <-- False
`x in aSet' / `x in a List` means x is one of the members of aSet/aList.  E.g. {1, 2, 'a', 'b'} has 4 members: 1, 2, 'a', 'b'. None of these equals set().

'' in 'a1b2'  <-- True
`x in aStr` means x is a substring of aStr (quite different).  The empty string is (vacuously but correctly) a substring of any string.  This may be inconvenient sometimes (as you say) but it is the logically correct behaviour.  Just as the modulus operator for ints returns the mathematically correct result (unlike in some languages such as C / C++) even though this may not always be what you want.

Best wishes
Rob Cliffe
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/OECCYUHZIX5JFG7MIAUURPIMXJTJ5R3T/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to