首页 > 解决方案 > 具有特定迭代顺序的坐标乘积

问题描述

这是一个经常itertools.product使用的片段:

from itertools import product

arr = [1,2,3]
pairs = list(product(arr, arr))

# pairs = [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]

现在我想让这些点按顺序产生,可以通过以下方式对结果元组进行排序来实现:

sorted(pairs, key=lambda y:max(y))
# [(1, 1), (1, 2), (2, 1), (2, 2), (1, 3), (2, 3), (3, 1), (3, 2), (3, 3)]

有没有办法让我输入这些数字,itertools.product以便按此顺序生成元组,或者我是否需要在迭代结果后对这些对进行排序itertools.product

标签: pythoncartesian-product

解决方案


您可能可以使用自己的修改方法一次性实现此目的。

sorted([(x, y) for x in [1, 2, 3] for y in [1, 2, 3]], key=lambda y:max(y))

输出

[(1, 1), (1, 2), (2, 1), (2, 2), (1, 3), (2, 3), (3, 1), (3, 2), ( 3, 3)]


推荐阅读