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