2012-12-27 100 views
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。

回答

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

我只有一个问题与它 - 例如:被附加TMP的

difference = 0.001 
tmp = [0.000999999999999994] 

差(Z变量) ,而tmp看起来像“圆形”而不是满0.001,我真的不知道如何正确格式化:(。

我会尝试现在就做,我会编辑我的帖子,如果我设法做到这一点莫名其妙。

@@@@ FIX编辑:@@@@@

我修改它的差异值更改为str,而不是将其作为浮动。

+0

这真是太棒了。我的代码太长,没有优化。 –

相关问题