Bha*_* Nc 0 python cartesian-product python-3.x
例如
nested = [a,b,c]
上面列表的笛卡尔乘积本身将生成以下对
[(a,a),(a,b),(a,c),(b,a),(b,c),(b,b),(c,a),(c,b),(c,c)]
我想找到一种方法来产生以下内容
[(a,b),(a,c),(b,a),(b,c),(c,a),(c,b)]
我尝试了以下
[(x,y) for x in nested for y in nested if x != y]
上面的代码在以下测试用例中失败
nested_testcase1 = [[1,2],[2,3],[1,2]]
Run Code Online (Sandbox Code Playgroud)
现在,上面的代码行将给出以下结果
[([1,2],[2,3]),([2,3],[1,2]),([1,2],[2,3]),([2,3],[1,2])]
但是我下面是什么
[([1,2],[2,3]),([2,3],[1,2]),([1,2],[2,3]),([2,3],[1,2]),([1,2],[1,2]),([1,2],[1,2])]
最后两个组合是通过将第一个和最后一个元素配对来实现的。
有人有什么想法吗?
尝试使用itertools排列
import itertools
list(itertools.permutations(['a','b','c'], r=2))
Run Code Online (Sandbox Code Playgroud)
输出随心所欲
[('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')]
Run Code Online (Sandbox Code Playgroud)
这也适用于您的情况:
list(itertools.permutations([[1,2],[2,3],[1,2]], 2))
Run Code Online (Sandbox Code Playgroud)
输出是
[([1, 2], [2, 3]), ([1, 2], [1, 2]), ([2, 3], [1, 2]), ([2, 3], [1, 2]), ([1, 2], [1, 2]), ([1, 2], [2, 3])]
Run Code Online (Sandbox Code Playgroud)
供参考,请参见:https : //docs.python.org/3.7/library/itertools.html#itertools.permutations
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |