[Python-ideas] Way to repeat other than "for _ in range(x)"

Markus Meskanen markusmeskanen at gmail.com
Thu Mar 30 12:10:06 EDT 2017


On Mar 30, 2017 19:04, "Joao S. O. Bueno" <jsbueno at python.org.br> wrote:

On 30 March 2017 at 10:51, Mark E. Haase <mehaase at gmail.com> wrote:
> Your example is really repeating two things:
>
> d = [ [0 for _ in range(5)] for _ in range(10) ]
>
> But since list() uses * for repetition, you could write it more concisely
> as:
>
> d = [[0] * 5] * 10]
>
> I'm not picking on your specific example. I am only pointing out that
Python
> gives you the tools you need to build nice APIs. If repetition is an
> important part of something you're working on, then consider using
> itertools.repeat, writing your own domain-specific repeat() method, or
even
> override * like list() does. One of the coolest aspects of Python is how a
> relatively small set of abstractions can be combined to create lots of
> useful behaviors.

I find it weird that not the author, neither the previous repliers noticed
that
"a repetition other than a for with dummy variable" was already in plain
sight,
in the very example given.
Of course one is also free to write [ [0 for _ in range(5)] for _ in
range(10)] if he wishes so.


Had you read all the replies, you'd see people (including me, OP) repeating
this multiple times:

d = [[0] * 5] * 10

Creates a list of ten references *to the same list*. This means that if I
mutate any of the sub lists in d, all of the sub lists get mutated. There
would only be one sub list, just ten references to it.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20170330/8adac86d/attachment.html>


More information about the Python-ideas mailing list