I'm not looking for solution, I'm looking for a better solution or just a different way to do this by using some other kind of list comprehension or something else.
I need to generate a list of tuples of 2 integers to get map coordinates like [(1, 1), (1, 2), ..., (x, y)]
So I have the following:
width, height = 10, 5
Solution 1
coordinates = [(x, y) for x in xrange(width) for y in xrange(height)]
Solution 2
coordinates = []
for x in xrange(width):
for y in xrange(height):
coordinates.append((x, y))
Solution 3
coordinates = []
x, y = 0, 0
while x < width:
while y < height:
coordinates.append((x, y))
y += 1
x += 1
Are there any other solutions? I like the 1st one most.
The input() function automatically converts the user input into string. We need to explicitly convert the input using the type casting. raw_input() - The raw_input function is used in Python's older version like Python 2.
Using itertools.product()
:
from itertools import product
coordinates = list(product(xrange(width), xrange(height)))
The first solution is elegant, but you could also use a generator expression instead of a list comprehension:
((x, y) for x in range(width) for y in range(height))
This might be more efficient, depending on what you're doing with the data, because it generates the values on the fly and doesn't store them anywhere.
This also produces a generator; in either case, you have to use list
to convert the data to a list.
>>> list(itertools.product(range(5), range(5)))
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (1, 0), (1, 1), (1, 2),
(1, 3), (1, 4), (2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (3, 0),
(3, 1), (3, 2), (3, 3), (3, 4), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4)]
Note that if you're using Python 2, you should probably use xrange
, but in Python 3, range
is fine.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With