将“预压缩”列表值转换为整数

时间:2019-04-20 20:55:51

标签: python-3.x type-conversion starmap

我经常有一个“预压缩”(元素是列表)数据的列表。我正在尝试将每个项目转换为整数(通常是从输入字符串开始)。

如何使复杂列表中的每个元素成为整数?

我最初尝试列表理解:

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()的行为相同:返回无法转换为列表的地图对象。


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

1 个答案:

答案 0 :(得分:0)

您可以对int(thing)上发生的事情使用exeption处理:

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]

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