Two python issues
Piergiorgio Sartor
piergiorgio.sartor.this.should.not.be.used at nexgo.REMOVETHIS.de
Tue Nov 5 16:27:53 EST 2024
On 05/11/2024 15.48, Raymond Boute wrote:
> L.S.,
>
> Python seem to suffer from a few poor design decisions regarding strings
> and lists that affect the elegance of the language.
>
> (a) An error-prone "feature" is returning -1 if a substring is not found
> by "find", since -1 currently refers to the last item. An example:
>
> >>> s = 'qwertyuiop'
> >>> s[s.find('r')]
> 'r'
> >>> s[s.find('p')]
> 'p'
> >>> s[s.find('a')]
> 'p'
> >>>
>
> If "find" is unsuccessful, an error message is the only clean option.
> Moreover, using index -1 for the last item is a bad choice: it should be
> len(s) - 1 (no laziness!).
> Negative indices should be reserved for elements preceding the element
> with index 0 (currently not implemented, but a must for orthogonal
> design supporting general sequences).
>
> (b) When using assignment for slices, only lists with the same length as
> the slice should be acceptable, otherwise an error should be given.
> Anything that re-indexes items not covered by the slice is against the
> essential idea of assignment. For changes that imply re-indexing (e.g.,
> inserting a list longer than the slice), Python offers cleaner solutions.
>
> Comments are welcome.
To write the nested expression, s[s.find(...)] it
means you're 200% sure of what happens in case of
not found.
It could be -1 or None or [] or anything.
So, the really correct thing to do, since you know
what will happen in case of not found, is *not* to
write the nested form, but explicitly state what it
will happen.
r = s.find(...)
if r is good:
s[r]
else:
print('not found')
Which is much easier to read, to debug, etc.
To paraphrase someone: "If the length of a
program would be measured by the time needed
to understand it, some programs are too short
to be short."
bye,
--
piergiorgio
More information about the Python-list
mailing list