On Tue, Mar 15, 2022 at 11:16:04AM +1100, Chris Angelico wrote:
> > How do we make a new list with a change other than the same slice and
> > concatenation we use with tuples?
> >
> > alist[:i] + [value] + alist[i+1:]
> >
> > I mean as an expression, of course we can split it over two statements:
> >
> > newlist = alist[:]
> > newlist[i] = value
> >
> > which is fine, but it does lose the expressiveness of an expression :-)
> >
>
> The functional programming style would be mapping most elements to
> themselves, and the one you're replacing to the replacement.
No, that doesn't work, because that is replacing by value, not by
position. You're answering the wrong problem.
> (Or, if you need to do it with indices, map the range of integers to
> either the original element at that index or the replacement.)
You mean this?
[value if index == i else alist[i] for index in range(len(alist))]
This would be *slightly* less unpythonic:
[value if index == i else x for (index, x) in enumerate(alist)]
but I would reject both of those in a code review unless you had clear
proof that they were significantly faster or more optimal than the
standard idioms. Which I am confident you won't have.
I'm so confident that they're slower I'm not even going to time it
myself before saying I'm confident they're slower! *wink*
Famous-last-words-ly y'rs,
--
Steve
_______________________________________________
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/FNBYYLIBVFSL65DIXLR2OD6YU3JO5QA2/
Code of Conduct: http://python.org/psf/codeofconduct/