使用递归从嵌套列表中获取绝对值

时间:2017-12-14 07:08:57

标签: python recursion nested-lists

我有这个嵌套列表:

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

你能给我一些解决方法吗(我不希望完全解决,只是一些提示)?

非常感谢你!

2 个答案:

答案 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]]