gpt4 book ai didi

python - 其输出不按字典顺序排列的笛卡尔积

转载 作者:行者123 更新时间:2023-11-30 23:25:20 25 4
gpt4 key购买 nike

我想在 Python 中的多个可迭代之间进行笛卡尔积,并且我想指定迭代的顺序。

例如在我的示例中,我有 3 个可迭代对象:'AB'、'xy'、'01'。当我写的时候

import itertools
print list(itertools.product('AB', 'xy', '01'))

输出位于 lexicographic order :

('A', 'x', '0')
('A', 'x', '1')
('A', 'y', '0')
('A', 'y', '1')
('B', 'x', '0')
('B', 'x', '1')
('B', 'y', '0')
('B', 'y', '1')

我希望能够指定我要首先迭代可迭代 1 ('AB'),然后迭代可迭代 3 ('01'),然后iterable 2 ('xy'),这将给出以下输出:

('A', 'x', '0')
('B', 'x', '0')
('A', 'x', '1')
('B', 'x', '1')
('A', 'y', '0')
('B', 'y', '0')
('A', 'y', '1')
('B', 'y', '1')

Python 中有没有标准的方法可以做到这一点?我可以使用 Numpy。

最佳答案

只需按照您希望迭代的顺序传递可迭代对象(或者更确切地说,用您的术语来说,相反的顺序——第一个传递的将是最外层的迭代,因此它将循环“最慢”)。如果您必须以不同的顺序获得结果元组,只需随后交换结果即可:

>>> [(c, a, b) for a, b, c in itertools.product('xy', '01', 'AB')]
[(u'A', u'x', u'0'),
(u'B', u'x', u'0'),
(u'A', u'x', u'1'),
(u'B', u'x', u'1'),
(u'A', u'y', u'0'),
(u'B', u'y', u'0'),
(u'A', u'y', u'1'),
(u'B', u'y', u'1')]

请注意,这不需要对结果进行任何额外的传递:每个元组在生成时都会进行交换。

关于python - 其输出不按字典顺序排列的笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23049205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com