将 "Pre-Zipped" 列表值转换为整数

Converting "Pre-Zipped" list values to integers

我经常有一个 "pre-zipped"(元素是列表)数据的列表。我正在尝试将每个项目转换为整数(通常来自输入字符串)。

如何将复杂列表中的每个元素都变成整数?

我最初尝试了列表理解:

ls = ["1", "2", ["3", "4", "5"], "6"]
ls = [int(i) for i in ls]

但是 int 函数不能接受可迭代对象,所以它在 int(["3", "4", "5"])

上中断


环顾四周,我了解了 map() 函数,它将一个函数应用于可迭代对象中的每个项目。

ls = ["1", "2", ["3", "4", "5"], "6"]

print(map(lambda x: int(x), ls))

以上代码输出

<map object at 0x000001A84C46E898>

但是当我尝试将其转换为列表时,出现错误

ls = ["1", "2", ["3", "4", "5"], "6"]

print(list(map(lambda x: int(x), ls)))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

所以我觉得 map 正在将列表传递给 int() 函数。我也试过 itertools.starmap():

import itertools

ls = ["1", "2", ["3", "4", "5"], "6"]

print(list(itertools.starmap(lambda x: int(x), ls)))

然而,这似乎与 map() 的行为相同:返回无法转换为列表的地图对象。


非常感谢您的帮助。谢谢!

您可以对 int(thing):

上抛出的事物使用异常处理
def makeInt(data):
    try:
        k = int(data)
    except ValueError:
        k = [makeInt(d) for d in data]
    return k

ls = ["1", "2", ["3", "4", "5"], "6"]

t = makeInt(ls)
print(t) 

输出:

[1, 2, [3, 4, 5], 6]

如果您向列表中提供非整数数据,这仍然会失败。