我在列表中有一个列表,并且想要将所有值更改为整数。我已经做到了,但是假设我让用户指定了列表中他们将拥有多少个列表。如何将所有这些值都转换为整数?
我有以下代码,该代码当前接受任何列表或列表中的任何列表,并将所有值转换为整数。我可以看到如何将其扩展到列表中的更多列表,但这可能是不必要的,或者可能还不够。当然,这似乎很慢,并且需要很多代码。
for i in l:
index = l.index(i)
l[index] = list(map(int, l[index]))
我的列表是l
,l
中的每个列表都是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'"
我了解这是因为我仅转换嵌套在列表中的列表,而不转换嵌套在列表中的列表中的列表,因此它认为我正在尝试将整个列表转换为整数。
长话短说,我如何构建一个可以将任意数量的嵌套列表转换为整数的函数?
答案 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]]