首页 > 解决方案 > 从列表中创建一个子列表,该列表的最小和最大元素之间的正差最小

问题描述

根据新列表的最小元素和最大元素之间的正差最小的条件,如何从 6 个或 7 个元素的列表中生成 4 个元素的列表?

我们知道可以找到两个数组元素之间的最小差异。但是如何根据它制作一个子列表,它的元素比主列表的元素少?

标签: pythonarrayslistmindifference

解决方案


如果您有一个满足此条件的 2 个元素的新列表,那么添加任意数量的其他元素不会改变这种情况。因此,您需要做的就是找到原始列表中最接近的两个元素。从那里您可以扩展到任何其他列表。

因此,您可以对列表进行排序并检查后续元素的差异:

original = [1, 3, 5, 6, 9, 15, 17]
s_orig = sorted(original)
pairs = list(zip(s_orig, s_orig[1:]))
closest = min(pairs, key=lambda x: x[1] - x[0])
new = list(closest)  # ... optionally add any other elements from 'original' as well

推荐阅读