2013-07-08 18 views
0
我有一个问题

因为我有一个格式化像这样的输出:由逗号分隔的输出行和停留在浮

[0.018801, 0.011839, -3332.980568, 0.009446, -3332.984916, 0.007438, -3332.982958] 
[0.020493, 0.015735, -3332.980353, 0.013179, -3332.968465, 0.055135, 0.135461] 
[0.020678, 0.018212, -3332.983603, 0.011993, 0.097811, 0.014364, 0.099570] 
[0.020758, 0.015798, -3332.982745, 0.013539, 0.086793, 0.007399, -3332.984997] 
[-3332.992594, 0.014576, -3332.979745, 0.015103, 0.089420, 0.009226, 0.090133] 
然而

,我需要每一行由在逗号分隔为了使其在该位的代码工作:

def mean(a): 
    return sum(a)/len(a) 
a = [A] 
print map(mean, zip(*a)) 

有没有什么办法来实现这一目标,同时仍然保持作为花车的列表?因为', '.join需要字符串值,不会让我取均值

下面是我用来生成代码:

with open("test2.xls") as w: 
    w.next() # skip over header row 
    for row in w: 
     (date, time, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, 
     u, LZA, SZA, LAM) = row.split("\t") # split columns into fields 

     A = [(float(a) + float(b) + float(c))/3, 
      (float(d) + float(e) + float(f))/3, 
      (float(g) + float(h) + float(i))/3, 
      (float(j) + float(k) + float(l))/3, 
      (float(m) + float(n) + float(o))/3, 
      (float(p) + float(q) + float(r))/3, 
      (float(s) + float(t) + float(u))/3] 

任何帮助表示赞赏

澄清:

我不需要更长的列表,我需要列表,我必须是相同的,但每行都用逗号分隔。所以,当我通过这通过意味着:

def mean(a): 
    return sum(a)/len(a) 
a = [A] 
print map(mean, zip(*a) 

我只得到了最后一排:

[-3332.992594, 0.014576, -3332.979745, 0.015103, 0.089420, 0.009226, 0.090133] 

但是,如果我写的输出和一个逗号,像这样分开的每一行:

def mean(a): 
    return sum(a)/len(a) 
a = [[0.018801, 0.011839, -3332.980568, 0.009446, -3332.984916, 0.007438, -3332.982958], 
[0.020493, 0.015735, -3332.980353, 0.013179, -3332.968465, 0.055135, 0.135461], 
[0.020678, 0.018212, -3332.983603, 0.011993, 0.097811, 0.014364, 0.099570], 
[0.020758, 0.015798, -3332.982745, 0.013539, 0.086793, 0.007399, -3332.984997], 
[-3332.992594, 0.014576, -3332.979745, 0.015103, 0.089420, 0.009226, 0.090133]] 
print map(mean, zip(*a)) 

我得到的

[-666.582372, 0.015232, -3332.981403, 0.012652, -1333.1358714, 0.018713, -1333.128558] 
所需的输出3210

或每列的平均值。 我怎样才能做到这一点,而不必手动用逗号医生A矢量?

+0

对不起,什么?你的意思是建立一个更大的名单?为什么不使用'greaterlist = []'并且在你的循环中执行'greaterlist.append(A)'? –

+1

我真的有*不知道你在这里想达到什么目的。 –

回答

1

您正在尝试生成列表的列表。但是,您并未保存每个列表 - 每次循环时都会创建一条新记录,然后将其替换为下一条记录。这就是为什么最终只包含最后一条记录。

逗号不相关 - 这只是Python的语法。这些值不会在内部以逗号存储!

不是将每个记录分配给A,而是将A初始化为空列表,然后将每个新记录添加到结尾。

A = [] 
with open("test2.xls") as w: 
    w.next() # skip over header row 
    for row in w: 
     (date, time, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, 
     u, LZA, SZA, LAM) = row.split("\t") # split columns into fields 

     A.append([(float(a) + float(b) + float(c))/3, 
     (float(d) + float(e) + float(f))/3, 
     (float(g) + float(h) + float(i))/3, 
     (float(j) + float(k) + float(l))/3, 
     (float(m) + float(n) + float(o))/3, 
     (float(p) + float(q) + float(r))/3, 
     (float(s) + float(t) + float(u))/3]) 
+0

完美!谢谢! – KJo

0

使用str()它们传递给str.join之前将它们转换为字符串,这不会影响原来的项目都:

>>> lis = [0.018801, 0.011839, -3332.980568, 0.009446, -3332.984916, 0.007438, -3332.982958] 
>>> print ", ".join(str(x) for x in lis) 
0.018801, 0.011839, -3332.980568, 0.009446, -3332.984916, 0.007438, -3332.982958 

列表中仍然包含花车:

>>> lis 
[0.018801, 0.011839, -3332.980568, 0.009446, -3332.984916, 0.007438, -3332.982958] 
2

other question推断,我认为你可以做你想做的是这样的:

def mean(a): 
    return sum(a)/len(a) 

averages = [] 
with open("test2.xls") as w: 
    w.next() # skip over header row 
    for row in w: 
     (date, time, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, 
     u, LZA, SZA, LAM) = row.split("\t") # split columns into fields 

     A = [(float(a) + float(b) + float(c))/3, 
      (float(d) + float(e) + float(f))/3, 
      (float(g) + float(h) + float(i))/3, 
      (float(j) + float(k) + float(l))/3, 
      (float(m) + float(n) + float(o))/3, 
      (float(p) + float(q) + float(r))/3, 
      (float(s) + float(t) + float(u))/3] 
     averages.append(A) 

print map(mean, zip(*averages)) 

或者它可以做多一点简明类似下面的代码:

def mean(a): 
    return sum(a)/len(a) 

averages = [] 
with open("test2.xls") as w: 
    w.next() # skip over header row 
    for row in w: 
     (date, time, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, 
     u, LZA, SZA, LAM) = row.split("\t") # split columns into fields 

     A = [mean(map(float, (a, b, c))), 
      mean(map(float, (d, e, f))), 
      mean(map(float, (g, h, i))), 
      mean(map(float, (j, k, l))), 
      mean(map(float, (m, n, o))), 
      mean(map(float, (p, q, r))), 
      mean(map(float, (s, t, u)))] 
     averages.append(A) 

print map(mean, zip(*averages)) 

而且更加简洁:

def mean(a): 
    return sum(a)/len(a) 

averages = [] 
with open("test2.xls") as w: 
    w.next() # skip over header row 
    for row in w: 
     cols = row.split("\t") # split into columns 
     # then split that into fields 
     date, time, values, LZA, SZA, LAM = (cols[0], cols[1], cols[2:23], 
              cols[23], cols[24], cols[25]) 
     A = [mean(map(float, values[i:i+3])) for i in xrange(0, 21, 3)] 
     averages.append(A) 

print map(mean, zip(*averages)) 

在最后一个中,如果您需要,您可以将averages重命名为a,因为不再有名为a的字段会与其冲突。无论如何,所有代码片段都会打印相同的答案。