我有一个数组或列表,如{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设置为截止值,则此处的max_diff应为7。