python - 确定两个列表的元素的分组程度

标签 python algorithm

我想做的是确定两个字符串的公共(public)元素的分组程度。可能已经有一个数学函数或 scipy/numpy/etc 函数可以执行此操作。我只是不知道它叫什么。我已经用谷歌搜索过了。例如:

该集合将获得满分(所有类似元素都分组):

['a','a','a','b','b','b']

也会:

['b','b','b','a','a','a']

这个系列会有一个较低的分数:

['a','a','b','b','b','a']

这个系列的得分非常低:

['a','b','a','b','a','b']

我可以想到几种方法来实现这一点,我只是想知道是否已经有一个定义此类事物的函数/算法。

我想到也许可以根据字符串中离散值的计数生成一个完美分组的字符串,并计算实际字符串和完美字符串之间的编辑距离。例如,比较:

['a','a','a','b','b','b']

至:

['b','b','b','a','a','a']

但同样,我正在寻找该算法是否已经有名称和实现。

最佳答案

我想不出任何现有的衡量标准,但似乎很容易制定一个衡量标准。您要求的是计算数组中的组数。

我的指标:数组长度除以组数

定义:

def metric(lst):
    L = len(lst)
    n = len(list(itertools.groupby(lst, lambda x: x)))
    return L/float(n)   # you can omit float if python 3

groupby 将计算数组 lst 中相同元素的 block 数。您不想像通常使用 groupby 那样对它进行排序,因为您正在计算 lst 元素中的更改。然后我们用lst的长度除以 block 的数量来找到“平均 block 长度”。这应该符合您的要求。

您可能需要衡量指标。在上面的情况下,它会支持更长的数组和更少的 block 。例如,您可以考虑 L 的平方根,以使指标遵循 yield 递减定律

关于python - 确定两个列表的元素的分组程度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55320013/

相关文章:

python - 从变量索引开始循环遍历列表

algorithm - 是否可以对图形进行着色,使相邻的顶点颜色不同,而不相邻的顶点颜色相同?

r - UNIX 中的预测分析(时间序列模型)

python - 在Python中转义正则表达式unicode字符串

c# - 在通用中查找速度

创建基于矢量的拼图的算法

algorithm - OpenGL 线段光栅化规范

python - 在 tkinter 中同时运行两个脚本

python - 在python中的文件中写入多行

python - 如何在 python 3 中使用 cookie?