0

我有一个列表如下:

data = [
[0.051, 0.05],
[],
[],
[],
[],
[],
[0.03],
[0.048],
[],
[0.037, 0.036, 0.034, 0.032],
[0.033, 0.032, 0.03]
]

我试图找到每个子列表中元素之间的第一个区别,但无法完全弄清楚如何使用 python 做到这一点。这是我写的:

x = {}
index = 0
for item in data:
    if len(item) < 2:
        x[index] = "NA"      
        index += 1
    else:
        try:
            x[index] = item[0] - item[1]
            index += 1        
        except IndexError:
            x[index] = "NA"
            index += 1
y = {}
index = 0
for item in data:
    if len(item) < 2:
        y[index] = "NA"      
        index += 1
    else:
        try:
            y[index] = item[1] - item[2]
            index += 1        
        except IndexError:
            y[index] = "NA"
            index += 1
z = {}
index = 0
for item in data:
    if len(item) < 2:
        z[index] = "NA"      
        index += 1
    else:
        try:
            z[index] = item[2] - item[3]
            index += 1        
        except IndexError:
            z[index] = "NA"
            index += 1

但是,我更喜欢一个更动态的版本,它可以根据每个子列表中的元素数量进行扩展。在数学上,对于 n 个元素,将有 n - 1 个一阶微分 x。

4

1 回答 1

1
data = [
[0.051, 0.05],
[],
[],
[],
[],
[],
[0.03],
[0.048],
[],
[0.037, 0.036, 0.034, 0.032],
[0.033, 0.032, 0.03]
]

x = {}
for i in range(0,len(data)):
    tmp = []
    #print "\ndata[i]= ", data[i]
    try:
        z = 0
        for s in range(0,len(data[i])):
            try:
                z = str(data[i][s] - data[i][s+1])   #WITHOUT THIS STR() HERE VALUES GOT ROUNDED - so instead of getting 0.001 it was 0.000999999999994 or sth like that.
                #print "difference = ", z
                tmp.append(z)
                #print "tmp = ", tmp
            except:
                pass
                #print "inside error"
    except:
        pass
        #print "error"#, i
    x[i+1] = tmp

print x

这是我的工作代码。我希望这就是你的意思。

----> v 这是固定的 v <----

我只有一个问题 - 例如:

difference = 0.001
tmp = [0.000999999999999994]

差异(z 变量)附加到 tmp,tmp 看起来像“四舍五入”而不是完整的 0.001,我真的不知道如何正确格式化:(。

我现在将尝试处理它,如果我设法以某种方式完成它,我将编辑我的帖子。

@@@@ 修复: @@@@@

我通过将差异值更改为 str 而不是将其保留为浮点数来修复它。

于 2012-12-27T15:09:31.613 回答