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

问题描述 投票:0回答:1

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

python arrays sorting
1个回答
1
投票

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

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设置为截止值,则此处的max_diff应为7。

© www.soinside.com 2019 - 2024. All rights reserved.