如何实现列表元素两两最小差值校验与自动调整功能
整数列表元素调整问题与解决方案
问题需求
需要处理整数小列表,确保满足以下两个条件:
- 列表内无重复元素
- 任意两元素的绝对差值至少为10(支持适配其他差值要求)
调整规则:若不满足任一条件,将较大的元素调整至符合差值要求。该功能用于大循环中批量处理多个小列表,示例输入为y_list = [16, 29, 10]。
原嵌套循环实现仅能完成三轮迭代,无法处理调整后新出现的不满足情况,尝试while True循环、all()函数及itertools.takewhile()均未解决问题。
最终实现方案
采用itertools.permutations生成所有元素对进行全组合校验,新增space参数以适配不同差值需求,该功能已成功用于52个Plotly图表的注释位置自动调整,实现代码如下:
import itertools def adjust(l, space): for (idx1,num1), (idx2,num2) in itertools.permutations(enumerate(l), 2): difference = abs(l[idx1] - l[idx2]) if difference < space: largest = max((idx1,num1), (idx2,num2), key=lambda x:x[1]) largest_index = largest[0] l[largest_index] = l[largest_index] + (space - difference) annotations[largest_index]['y'] = l[largest_index]
说明:代码中
annotations为外部定义的Plotly注释列表,需保证其索引与输入列表l的索引一一对应。
内容的提问来源于stack exchange,提问作者Alex H
相关产品推荐
相关产品推荐

