我经常有一个“预压缩”(元素是列表)数据的列表。我正在尝试将每个项目转换为整数(通常是从输入字符串开始)。
如何使复杂列表中的每个元素成为整数?
我最初尝试列表理解:
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()的行为相同:返回无法转换为列表的地图对象。
我们非常感谢您的帮助。谢谢!
答案 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]
如果您将非整数数据提供到列表中,这仍然会失败。