将多个嵌套列表转换为整数

时间:2019-06-30 15:16:24

标签: python python-3.x list type-conversion int

我在列表中有一个列表,并且想要将所有值更改为整数。我已经做到了,但是假设我让用户指定了列表中他们将拥有多少个列表。如何将所有这些值都转换为整数?

我有以下代码,该代码当前接受任何列表或列表中的任何列表,并将所有值转换为整数。我可以看到如何将其扩展到列表中的更多列表,但这可能是不必要的,或者可能还不够。当然,这似乎很慢,并且需要很多代码。

for i in l:
    index = l.index(i)
    l[index] = list(map(int, l[index]))

我的列表是ll中的每个列表都是i。我获取我所处位置的索引,并将其中的所有值转换为整数。我该如何创建一个函数/循环来接收列表中有多少个列表,然后将它们全部转换为整数?

例如在此输入上:

l = [['6', '5'], '7', ['88', '99', '1']]

上面的代码将返回:

[[6, 5], 7, [88, 99, 1]]

但是,如果我有

l = [['6', '7'], ['6', ['7', '8']]]

我收到错误:

"TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'"

我了解这是因为我仅转换嵌套在列表中的列表,而不转换嵌套在列表中的列表中的列表,因此它认为我正在尝试将整个列表转换为整数。

长话短说,我如何构建一个可以将任意数量的嵌套列表转换为整数的函数?

2 个答案:

答案 0 :(得分:7)

您可以每次都使用递归函数将内容上移一级:

def convert_rec(x):
    if isinstance(x, list):
        return list(map(convert_rec, x))
    else:
        return int(x)

请注意,现在您无需使用循环,只需在整个列表中调用此函数即可。可以按预期工作:

>>> l = [['6', '5'], '7', ['88', '99', '1']]
>>> print(convert_rec(l))
[[6, 5], 7, [88, 99, 1]]
>>> l = [['6', '7'], ['6', ['7', '8']]]
>>> print(convert_rec(l))
[[6, 7], [6, [7, 8]]]

还要注意,此代码在尝试转换为int时可能会引发异常,因此,对于更通用且更易于调试的代码,请添加try/except

def convert_rec(x):
    if isinstance(x, list):
        return list(map(convert_rec, x))
    else:
        try:
            x = int(x)
        except ValueError as ve:
            print(ve)
        except TypeError as te:
            print(te)
        finally:
            return x

答案 1 :(得分:1)

或者也许我们可以简单地使用re.sub

import re

print(eval(re.sub(r"'", "", str([['6', '5'], '7', ['88', '99', '1']]))))

输出

[[6, 5], 7, [88, 99, 1]]