这是来自itertools的产品:
product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
但我想改为: - > Ax Bx Cx Dx Ay By Cy Dy
我怎么能这样做?
答案 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)
算法(其中N
为len(first) * len(second)
)
答案 2 :(得分:0)
并不过分优雅,但它有效:
for p in product( 'xy', 'ABCD'):
print(''.join(reversed(p)))