我试图在长度为2的列表中找到元组中项目的所有排列.元组彼此之间的顺序并不重要.

perm = [(3, 6), (6, 8), (4, 1), (7, 4), (5, 3),
        (1, 9), (2, 5), (4, 8), (5, 1), (3, 7),
        (6, 9), (10, 2), (7, 10), (8, 2), (9, 10)]

上述列表的一种排列的一个示例如下:

perm = [(6, 3), (6, 8), (4, 1), (7, 4), (5, 3),
        (1, 9), (2, 5), (4, 8), (5, 1), (3, 7),
        (6, 9), (10, 2), (7, 10), (8, 2), (9, 10)]

另一个排列的例子是:

perm = [(6, 3), (8, 6), (1, 4), (4, 7), (3, 5),
        (9, 1), (5, 2), (8, 4), (1, 5), (7, 3),
        (9, 6), (2, 10), (10, 7), (2, 8), (10, 9)]

最后,排列列表的长度应该是32768,因 for each 元组要么交换,要么不交换,并且2^15=32768.我不关心元组彼此之间的顺序,只关心元组中项的排列.

我try 过使用迭代工具置换、组合和乘积,但是我没有得到想要的结果.

推荐答案

您可以使用product:

from itertools import product

lst = [(3, 6), (6, 8), (4, 1), (7, 4), (5, 3),
       (1, 9), (2, 5), (4, 8), (5, 1), (3, 7),
       (6, 9), (10, 2), (7, 10), (8, 2), (9, 10)]

output = product(*([(x, y), (y, x)] for x, y in lst))

output = list(output) # if you want a list, rather than a generator

print(len(output))
# 32768

print(output[0])
# ((3, 6), (6, 8), (4, 1), (7, 4), (5, 3), (1, 9), (2, 5), (4, 8), (5, 1), (3, 7), (6, 9), (10, 2), (7, 10), (8, 2), (9, 10))
print(output[-1])
# ((6, 3), (8, 6), (1, 4), (4, 7), (3, 5), (9, 1), (5, 2), (8, 4), (1, 5), (7, 3), (9, 6), (2, 10), (10, 7), (2, 8), (10, 9))

关键是要写一些类似于

output = product([(3,6), (6,3)], [(6,8), (8,6)], ..., [(9,10), (10,9)])

以通用的方式使得任何输入列表都可以工作,这通过生成器表达式和解包(*)来完成.

Python相关问答推荐

Class_weight参数不影响RandomForestClassifier不平衡数据集中的结果

TARete错误:类型对象任务没有属性模型'

难以在Manim中正确定位对象

将两只Pandas rame乘以指数

2D空间中的反旋算法

Pandas—在数据透视表中占总数的百分比

实现神经网络代码时的TypeError

Django—cte给出:QuerySet对象没有属性with_cte''''

如何在Python中获取`Genericums`超级类型?

Flash只从html表单中获取一个值

Maya Python脚本将纹理应用于所有对象,而不是选定对象

为什么我的sundaram筛这么低效

pandas fill和bfill基于另一列中的条件

使用python playwright从 Select 子菜单中 Select 值

如何使用matplotlib查看并列直方图

如何在Python中从html页面中提取html链接?

用由数据帧的相应元素形成的列表的函数来替换列的行中的值

类型对象';敌人';没有属性';损害';

根据过滤后的牛郎星图表中的数据计算新系列

极点:在固定点扩展窗口