如何在列表中将每个元素设为正数
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])
答案 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]
您的方法也接近正确,我们只需要加入p
和k
:
[[k_sub]+p_sub for k_sub,p_sub in zip(k,p)]