我有这个嵌套列表:
list1 = [2,-6, [8,-12,-12, [4, [-6], -3]], 7, [3.55, -3.55]].
我必须使用递归来获取列表中所有元素的绝对值,以便输出保持为列表:
[2, 6, [8, 12, 12, [4, [6], 3]], 7, [3.55, 3.55]].
这是代码:
def rec_abs(a):
new_list=[]
for el in a:
if isinstance(el, list):
new_list.append(rek_abs(el))
else:
new_list.append(el)
return new_list
print(rek_abs([2,-6, [8,-12,-12, [4, [-6], -3]], 7, [3.55, -3.55]]))
你能给我一些解决方法吗(我不希望完全解决,只是一些提示)?
非常感谢你!
答案 0 :(得分:3)
一切都很完美,只需使用abs()
将其转换为绝对值
注意:您在代码中输入了拼写错误的rec_abs和rek_abs,我在下面的代码中对其进行了修改
def rec_abs(a):
new_list=[]
for el in a:
if isinstance(el, list):
new_list.append(rec_abs(el))
else:
new_list.append(abs(el))
return new_list
print(rec_abs([2,-6, [8,-12,-12, [4, [-6], -3]], 7, [3.55, -3.55]]))
[2, 6, [8, 12, 12, [4, [6], 3]], 7, [3.55, 3.55]]
答案 1 :(得分:1)
作为参考,就地修改列表是一种简单,更有效的替代方案,因此您应尽可能考虑这一点。迭代时,迭代索引,并将返回值赋给第i个索引。
def rec_abs(a):
for i, el in enumerate(a):
a[i] = rec_abs(el) if isinstance(el, list) else abs(a[i])
return a
lst = [2,-6, [8,-12,-12, [4, [-6], -3]], 7, [3.55, -3.55]]
print(rec_abs(lst))
[2, 6, [8, 12, 12, [4, [6], 3]], 7, [3.55, 3.55]]