将列表中的负元素转换为正数,但第一个元素除外

时间:2017-11-01 04:37:01

标签: python list

如何在列表中将每个元素设为正数

 l =[[u'Contribution', -2.6, -2.6, -2.6, -1.3, 0.0, 0.0, 
     0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -9.100000000000001], [u'Tax ', 
     -569.72, -569.72, -569.72, -284.86, 0.0, 0.0, 0.0, 0.0, 
     0.0, 0.0, 0.0, 0.0, -1994.02], [u'CityTax', -387.32, 
     -387.32, -387.32, -193.66, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
      0.0,-1355.6200000000001]]

输出应该像

  [[u'Contribution', 2.6, 2.6, 2.6, 1.3, 0.0, 0.0, 
     0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.100000000000001], [u'Tax ', 
     569.72, 569.72, 569.72, 284.86, 0.0, 0.0, 0.0, 0.0, 
     0.0, 0.0, 0.0, 0.0, 1994.02], [u'CityTax', 387.32, 
     387.32, 387.32, 193.66, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
      0.0,1355.6200000000001]]

-ve值应该转换为正值,列表应该是原样

我试过这个

 p=[]
 k=[]   
 for i in l:
    p.append([abs(x) for x in i[1:]])
    k.append(i[0])
 for j in p:
    j.append(k[j])

2 个答案:

答案 0 :(得分:3)

这种理解将起作用:

[[x[0]] + [abs(y) for y in x[1:]] for x in l]

内在理解的替代方法,您可以使用map

[[x[0]] + list(map(abs, x[1:])) for x in l]

或者,最常见的是:

[[abs(y) if hasattr(y, '__abs__') else y for y in x] for x in l]

答案 1 :(得分:0)

另一种选择,如果非数字元素分布在子列表中(也避免切片):

[[abs(x) if isinstance(x,(int,float)) else x for x in sublist] for sublist in l]

您的方法也接近正确,我们只需要加入pk

[[k_sub]+p_sub for k_sub,p_sub in zip(k,p)]