使用map将字符串列表转为int却得到嵌套list的原因及解决方法
问题分析与解决方法
首先,咱们先搞清楚为什么会得到嵌套列表——大概率是你把字符串的每个字符单独转成int了,而不是把整个字符串作为一个整体转换。
举个例子,假设你的列表是:
a = ["123", "456", "789"]
如果你的代码是这样的:
result = list(map(lambda s: list(map(int, s)), a))
那你得到的肯定是嵌套列表[[1,2,3], [4,5,6], [7,8,9]]——因为内层的map(int, s)会迭代字符串s的每个字符,把每个字符转成int,再套个list()就变成了子列表。
而你真正想要的是把整个字符串转成单个整数,对吧?
正确的转换方法
其实非常简单,直接用map(int, 你的列表)就行,然后把map返回的迭代器转成列表(Python 3里map返回迭代器,Python 2里直接返回列表):
a = ["123", "456", "789"] result = list(map(int, a)) # 输出: [123, 456, 789]
为什么之前会出错?
你提到字符串是类list的可迭代对象,这没错——当你把字符串传给map(int, s)时,map会自动迭代字符串的每个字符,把每个字符转成int。但如果你想把整个字符串转成一个整数,直接把字符串传给int()函数就行,int("123")会直接返回整数123,不需要再嵌套map。
额外说明
如果你的列表里有非数字的字符串,比如["123", "abc", "456"],直接用map(int, a)会报错,这时候你可以加个判断或者异常处理,比如:
def safe_int_convert(s): try: return int(s) except ValueError: return None # 或者返回你想要的默认值 a = ["123", "abc", "456"] result = list(map(safe_int_convert, a)) # 输出: [123, None, 456]
内容的提问来源于stack exchange,提问作者B Furtado
相关产品推荐
相关产品推荐

