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<----

問題は1つだけです。たとえば、次のようになります。

difference = 0.001
tmp = [0.000999999999999994]

差分(z変数)がtmpに追加され、tmpは完全な0.001ではなく「丸められた」ように見えます。適切にフォーマットする方法がわかりません:(。

今から作業を試み、なんとかできたら投稿を編集します。

@@@@修正編集:@@@@@

差分値をfloatのままにするのではなく、strに変更して修正しました。

于 2012-12-27T15:09:31.613 に答える