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

2024-06-07 19:41:42 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使列表中的每个元素都成为正数

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

Tags: in元素列表forveabstaxappend
2条回答

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

[[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)]

这种理解将起作用:

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

相关问题 更多 >

    热门问题