在python中,如何从一个数组中找到所有元素相互减法的绝对值小于8的所有子集?

在python中,如何从一个数组中找到所有元素相互减法的绝对值小于8的所有子集?,python,arrays,sorting,Python,Arrays,Sorting,我有一个类似{17,24,25,33,38,42,50}的数组或列表。如何从数组或列表中找到其相互减法的绝对值小于8的子集中的所有元素?例如,{17,24,25},{38,42},{42,50}是正确的子集,因为子集中的所有元素其相互减法的绝对值都小于8,但{17,24,25,33}不是因为{33-17 |大于8。如果我们首先对数组排序,那么我们可以建立滑动窗口样式。根据数据的实际分布情况,这需要二次时间进行枚举 def subsets(l, max_diff): sorted_list

我有一个类似{17,24,25,33,38,42,50}的数组或列表。如何从数组或列表中找到其相互减法的绝对值小于8的子集中的所有元素?例如,{17,24,25},{38,42},{42,50}是正确的子集,因为子集中的所有元素其相互减法的绝对值都小于8,但{17,24,25,33}不是因为{33-17 |大于8。

如果我们首先对数组排序,那么我们可以建立滑动窗口样式。根据数据的实际分布情况,这需要二次时间进行枚举

def subsets(l, max_diff):
    sorted_list = sorted(l)
    for i, low in enumerate(sorted_list):
        for j, high in enumerate(sorted_list[i:], start=i+1):
            if high - low > max_diff:
                break
            yield sorted_list[i:j]

请注意,如果您希望将8设置为截止值,此处的最大差值应为7。

感谢您的回复。但是,如何打印生成器?我尝试了'Mat=subsetslist,maxdiff print[n for n in Mat]',结果似乎不正确。您能提供您期望的内容和代码提供的内容吗?当然,例如,如果我的列表是{17,24,25,33,38,42,50},我希望看到像{17,24,25},{25,33},{33,38},{38,42},{17,24}这样的结果也满足您的要求。你是说你想要最大的吗?是的,最大的。