I am purposefully proposing this for slices as opposed to ranges because it is
about the bounds of the slices, not the items in synthetic sequences. Also,
slices can refer to any type of value, not just integers.
Presumably, these operations would raise exceptions when used with slices that
have `step` values other than `None`. Alternatively, those could hypothetically
be valid in restricted cases such as when all properties are either int or
Fraction types. Probably better to have them be simply unsupported though.
```
a in b # True if <a> is fully contained within <b>
a.intersects(b) # True if any value could be within both <a> and <b>
a & b # Intersection of <a> and <b> or None if no intersection
a | b # Union of <a> and <b> or Exception if neither contiguous nor
overlapping.
```
Also, it might be nice to be able to test whether a non-slice value falls
within the slice's bounds. This would be using `x in s` as a shorthand for
`s.start <= x < s.end`. Again, this is different than asking whether a value is
"in" a range because a rage is a sequence of discrete integers whereas a slice
represents a possibly continuous range of any kind of value to which magnitude
is applicable.
```
slice(1, 2) in (0, 3)
# => True because 1 >= 0 and 2 <= 3
slice(0.5, 1.5) in slice(0, 2)
# => True because 0.5 >= 1.5 and 0.5 < 2
1 in (0, 3)
# => True because 0 <= 1 < 3
'Joe' in slice('Alice', 'Riley')
# => True because 'Alice' <= 'Joe' < 'Riley'
slice(1.1, 5.9).intersects(slice(2, 10.5))
# => True because either...
# 1.1 <= 2 < 5.9 or
# 1.1 < 10.5 < 5.5 or
# 2 <= 1.1 < 10.5 or
# 2 < 5.9 < 10.5
slice(5.5, 15.5) & slice(10.25, 20.25)
# => slice(10.25, 15.5)
slice(5.5, 15.5) | slice(10.25, 20.25)
# => slice(5.5, 20.25)
slice('abc', 'fff') & slice('eee', 'xyz')
# => slice('fff', 'eee')
```
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/EGAMXMDCKBA4I5BSQL4KCI2DE3NM7L7F/
Code of Conduct: http://python.org/psf/codeofconduct/