如何在Python中对itertools.product进行排序?

时间:2015-10-07 17:13:32

标签: python

这是来自itertools的产品:

product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy

但我想改为: - > Ax Bx Cx Dx Ay By Cy Dy 我怎么能这样做?

3 个答案:

答案 0 :(得分:3)

更改参数的顺序并反转元组product的产量。它可能比排序更有效,因为它不需要构建中间列表。

from itertools import product

def reorder_product(*a):
    for tup in product(*a[::-1]):
        yield tup[::-1]

示例:

print(*[''.join(t) for t in reorder_product('ABCD', 'xy')])
# Output:
#     Ax Bx Cx Dx Ay By Cy Dy

答案 1 :(得分:1)

如果你交换产品的订单然后简单地反转每个产生的项目,你可能会效率最高:

def product_sorted_by_second(first, second):
    for item in itertools.product(second, first):
        yield item[::-1]

当然,这是一个可怕的功能名称(因为我们并没有真正排序)。

这里的优点是您实际上不需要排序(这是一个O(NlogN)处理步骤)。因此,这最终成为O(N)算法(其中Nlen(first) * len(second)

答案 2 :(得分:0)

并不过分优雅,但它有效:

for p in product( 'xy', 'ABCD'):
    print(''.join(reversed(p)))