Первое решение элегантно, но вы могли бы также использовать выражение генератора вместо понимания списка:
((x, y) for x in range(width) for y in range(height))
Это может быть более эффективным, в зависимости от того, что вы делаете с данными, потому что оно генерирует значения на лету и нигде не хранит их.
Это также производит генератор; в любом случае вы должны использовать 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)]
Обратите внимание, что если вы используете Python 2, вам, вероятно, следует использовать xrange
, но в Python 3 с range
все в порядке.