【发布时间】:2021-04-07 12:45:07
【问题描述】:
我想重现来自this paper 的实验。作者说他们使用了线性扩展,MathWorld对线性扩展的定义是:
偏序集 P 的线性扩展是 P 的元素 p_1, p_2, ... 的置换,使得 p_i
根据线性扩展的定义,我发现python代码是这样的
import itertools
groups = [(1,2),(3,4)]
groupdxs = [i for i, group in enumerate(groups) for j in range(len(group))]
old_combo = ()
for dx_combo in itertools.permutations(groupdxs):
if dx_combo <= old_combo: # as simple filter
continue
old_combo = dx_combo
iters = [iter(group) for group in groups]
print([next(iters[i]) for i in dx_combo])
根据线性扩展的定义,结果完全一样: 结果如下:
[1, 2, 3, 4]
[1, 3, 2, 4]
[1, 3, 4, 2]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 4, 1, 2]
但是,我不知道如何根据论文实现这一点:
- 论文中的线性扩展是按降序排列的,高分在前。
- 看来论文中的线性扩展是基于字典而不是元组。
假设我有一个 Pandas 数据框 df:
import pandas as pd
data = [['a1', '10-11'], ['a2', '3-8'], ['a3', '4-6'],['a4','1-2'], ['a5','5-10']]
df = pd.DataFrame(data, columns = ['A', 'B'])
df
df:
A B
0 a1 10-11
1 a2 3-8
2 a3 4-6
3 a4 1-2
4 a5 5-10
我的问题是如何根据论文从df 生成所有排列?论文中的线性扩展示例如下图所示:
预期的结果是这样的:
[a1, a5, a3, a2, a4]
[a1, a2, a5, a3, a4]
.
.
.
【问题讨论】:
标签: python list permutation