Skip to main content
 首页 » 编程设计

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

2025年05月04日12cmt

我有一个列表中的列表,并且想将所有值更改为整数。我已经做到了这一点,但假设我让用户指定他们将拥有的列表中的列表数量。我怎样才能将所有这些值也转换为整数?

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

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

我的列表是l,l中的每个列表都是i。我获取 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'" 

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

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

请您参考如下方法:

您可以使用递归函数每次都进入一个级别:

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