【发布时间】:2014-06-13 05:53:59
【问题描述】:
我有这个清单:
data = [[0.0322249406353, 1.00005691884],
[0.0322267803497, 0.999999986608],
[0.0322286200641, 0.499997756763],
[0.0322304597785, 0.333330346815],
[0.0322322994929, 0.249996641841],
[0.0322341392073, 0.199996418857],
[0.0322359789217, 0.166662936867],
[0.0322378186361, 0.142853306874],
[0.0322396583505, 0.12499608438],
[0.032241498065, 0.111107133551],
[0.0322433377794, 0.0999959728877],
[0.0322451774938, 0.0909050232541],
[0.0322470172082, 0.0833292318929],
[0.0322488569226, 0.0769189468948],
[0.032250696637, 0.0714244168966],
[0.032350696637, 0.],
[0.032450696637, -0.04]]
因为我稍后会使用它,并且我不想使用包含许多信息聚集在特定范围内的列表,而其余数据中的信息稀缺我想过滤我的原始列表以便我结束列出一个列表,其中data[i][1](第二列)的连续值之间的距离大于给定值,例如0.05,如果它们在 [0,1] 内。
data 是一个列表,其中第二列的值不断减少,所以data[i][1] < data[i-1][1]。
所以我想要的列表是这样的:
data2 = [[0.0322249406353, 1.00005691884],
[0.0322267803497, 0.999999986608],
[0.0322286200641, 0.499997756763],
[0.0322304597785, 0.333330346815],
[0.0322322994929, 0.249996641841],
[0.0322378186361, 0.142853306874],
[0.032350696637, 0.],
[0.032450696637, -0.04]]
任何想法如何做到这一点?谢谢
编辑(第一次尝试):
data2=[]
for i in xrange(0,len(data)):
if 0>data[i][1] or data[i][1]>1:
data2.append([data[i][0],data[i][1]])
for j in xrange(0,len(data)):
if j>i and 0<data[i][1]<1 and 0<data[j][1]<1:
if data[i][1] - data[j][1] > 0.05:
data2.append([data[i][0],data[i][1]])
i = j
break
这部分有效,因为我得到了一个不完整且不正确的新列表:
data2=[[0.0322267803497, 0.999999986608], [0.0322286200641, 0.499997756763], [0.0322304597785, 0.333330346815], [0.0322322994929, 0.249996641841], [0.0322341392073, 0.199996418857], [0.0322359789217, 0.166662936867], [0.0322378186361, 0.142853306874], [0.0322396583505, 0.12499608438], [0.032450696637, -0.04]]
【问题讨论】:
-
@jpcgandre 请澄清,对于数据中的每个列表,仅当
0 < data[i][1] < 1 and 0 < data[i+1][1] < 1 and data[i][1] - data[i+1][1] > 0.05时才满足条件?? -
是的,就是这样。