【发布时间】:2017-10-29 20:42:22
【问题描述】:
正如标题所示,我正在尝试循环遍历数据列表以创建对并继续这样做,直到无法再创建对为止。对于上下文,我正在使用浮点数,并且想要遍历列表中的所有元素,然后将它们与其他所有元素进行比较,以查看它们是否在当前项目上方或下方的 0.03 内。
如果它们是,那么我正在尝试在它们的列表中创建一个由高和低组成的元组。然后我想继续循环遍历整个列表,直到组合在一起的所有“范围”都被分组。
我尝试使用我所拥有的 Python 知识将一些代码组合在一起,并将其分解为可以单独查看但到目前为止还没有任何工作的更小的问题。离我最近的是下面不完整的代码:
s = []
t = ()
for item in items:
for v in items:
if v < (item + 0.03) and v > (item - 0.03):
t = (item, v)
s.append(t)
虽然我不确定在哪里插入循环,或者如何调节它,而且我还没有用元组替换匹配项,但这只是一个粗略的开始。
结果应该是这样的(我对细节不挑剔,只要我可以创建所有组):
初始列表: 1.05, 1.07, 1.18, 1.19, 1.22, 1.26, 1.30, 1.32
在第一次通过时,这会创建:
[(1.07, 1.05), (1.19, 1.18), 1.22, 1.26, (1.30, 1.32)]
此时配对数字在元组中,其中第一个位置是范围的高位,第二个位置是范围的低位。
下一次传球(也是这个简短示例的最后一次传球):
[(1.07, 1.05), (1.22, 1.18), 1.22, 1.26, (1.30, 1.32)]
请注意,第二个元组的先前高点已被 0.03、1.22 范围内的新高点取代
这正是我想象的展开方式,但只要我达到找到所有对子范围的最终结果,那么我就会成功。
解释原因:我正在寻找图表上的“区域”(或者更确切地说是折线图的数据点)。我将相似点定义为彼此相距 0.03,完成后我将能够在图表上绘制水平线以显示活动区域。该区域不必有设定的高度,它可以大也可以小,只要每个点与最近的邻居的距离为 0.03 即可。此外,如果我们有 (1.01, 1.03) 和 (1.05, 1.08),列表将变为 (1.01, 1.08),所以我知道这个范围或组从 1.01 到 1.08。 (分别为低和高)。 1.03 和 1.05 不再重要,因为它们在该区域内。
【问题讨论】:
-
结束列表应该是什么样的,你当前的代码会产生什么?
-
为了更清楚,您是否可以添加一个值列表作为示例以及您希望从这些值中获取的元组列表。
-
这个任务可以通过首先对数据进行排序来简化。
-
谢谢,PatrickHaugh 和 Marco,我已经扩展了我认为应该如何解决的问题。
-
@PM2Ring,所以先从低到高对数据进行排序,还是沿着这些方向排序?我一点也不反对,但那会是什么样子呢?也许
if current < (next + 0.03) or current > (next - 0.03)?根据我的低经验,我认为我仍然需要做同样的事情(比较,然后循环直到无法配对),对吧?
标签: python python-3.x