TimY
TimY

Reputation: 5416

Creating a generator expression or list comprehension without variable "x in" (e.g. for range) in Python

In Python, is there any way to write this list comprehension without the "x in" variable (since it is left completely unused)? Same applies to a generator expression. I doubt this comes up very often, but I stumbled onto this a few times and was curious to know.

Here's an example:

week_array = ['']*7
four_weeks = [week_array[:] for x in range(4)]

(Also perhaps, is there a more elegant way to build this?)

Upvotes: 10

Views: 3843

Answers (4)

jadkik94
jadkik94

Reputation: 7068

This is similar to other answers, in that I use map, but what I did uses the same function you are using.

four_weeks = map(lambda i: week_array[:], range(4))

Also, the main advantage compared to using _ for example is that it could already be used (_ is used by gettext often) and it changes its value in to the last item in the iterator. See this example:

[x for x in range(4)]
assert x == 3, 'x should be equal to 3'

Upvotes: 0

Aleksei astynax Pirogov
Aleksei astynax Pirogov

Reputation: 2491

week_array = ['']*7
four_weeks = map(list, [week_array]*4)

Upvotes: 1

wim
wim

Reputation: 362647

I don't believe so, and there is no harm in the x. A common thing to see when a value is unused in this way is to use an underscore as the free variable, e.g.:

[week_array[:] for _ in range(4)]

But it's nothing more than a convention to denote that the free variable goes unused.

Upvotes: 19

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798606

No. Both constructs must have an iterator, even if its value is unused.

Upvotes: 3

Related Questions