HOWTO · Python

在 Python 中把字符串列表转换为整数

本教程演示了如何在 Python 中把字符串列表转换为整数。

本页内容

使用 int() 转换数字字符串,即可构建整数列表。列表推导式是简洁的默认选择;map() 和 for 循环也是实用的替代方法。如果项目中已经使用 NumPy,也可以用它转换数组中的值。以下示例使用一致的输入数据。所提供的运行结果显示,转换后得到 [12, 7, 50, 92]。

将字符串列表转换为整数

每个字符串都必须表示 int() 可接受的整数,例如 "12" 或 "-4"。转换会生成整数值,因此后续计算时无需反复解析字符串。简单转换可以使用列表推导式;如果要对可迭代对象中的每个元素应用函数,可以使用 map();如果每个元素都需要额外处理,则可以使用循环。

使用列表推导式

列表推导式可以用一个清晰易读的表达式同时完成转换和收集。运行以下示例:

本节中的代码以及显示的标签或输出仍为英文。

values = ["12", "7", "50", "92"]
integers = [int(value) for value in values]
print(integers)
[12, 7, 50, 92]

这会创建一个新列表,而 values 保持不变。list comprehension 是 Python 语言结构,不是方法。当每个输入都需要转换且转换过程简单时,列表推导式是不错的默认选择。

使用 map()

map() 会对每个元素应用 int()。在 Python 3 中,它会返回一个迭代器;如果需要列表形式的结果或要将结果作为列表打印,请用 list() 包装:

本节中的代码以及显示的标签或输出仍为英文。

values = ["12", "7", "50", "92"]
integers = list(map(int, values))
print(integers)
[12, 7, 50, 92]

这种方法的转换行为与前一个示例相同。逐个处理值时,迭代器很有用,但遍历时迭代器会被消耗;如果需要可重复使用的列表,请先将其转换为列表。对于常规转换,函数和列表推导式都是清晰易懂的选择。

使用 for 循环

循环会明确展示每一步;如果转换时需要对每个元素单独处理,例如记录哪个源值转换失败,循环就很方便。将每个转换后的值追加到结果列表中:

本节中的代码以及显示的标签或输出仍为英文。

values = ["12", "7", "50", "92"]
integers = []
for value in values:
    integers.append(int(value))
print(integers)
[12, 7, 50, 92]

如果单行列表推导式会掩盖重要的处理步骤,就使用这种写法;如果只是直接转换,列表推导式更简短。

使用 NumPy 转换字符串

如果项目已经使用 NumPy,而且数值处理需要数组,可以将字符串转换为整数类型。以下完整示例会导入 NumPy、定义输入并打印结果数组;运行示例的环境中必须已安装 NumPy:

本节中的代码以及显示的标签或输出仍为英文。

try:
    import numpy as np
except ImportError:
    print("Install NumPy to run this example.")
else:
    values = ["12", "7", "50", "92"]
    integers = np.array(values, dtype=int)
    print(integers)

结果是 NumPy 整数数组,而不是 Python 列表。如果后续工作需要 NumPy 的数组运算,可以采用这种方法。性能和内存用量取决于数据规模及工作负载;比较速度前,请先测量自己的具体情况。

处理无法转换的值

像 "seven" 这样的字符串并不表示整数,因此 int() 会引发 ValueError。如果输入可能包含这类值,可以在每次转换时捕获异常,再决定跳过该值、报告它,还是停止处理。例如,下面的写法会收集有效整数,并记录被拒绝的字符串:

本节中的代码以及显示的标签或输出仍为英文。

values = ["12", "seven", "50"]
integers = []
rejected = []
for value in values:
    try:
        integers.append(int(value))
    except ValueError:
        rejected.append(value)
print(integers)
print(rejected)
[12, 50]
['seven']

只处理预期会出现的转换错误;捕获 ValueError 可以让其他编程错误继续显现。如果所有值都必须有效,让异常继续向上传播可能更合适,因为这样能及时暴露错误输入。请根据应用的实际需要,在适当的位置验证或报告被拒绝的值。

转换十进制字符串和混合值

int() 接受整数形式的字符串,不接受 "3.8" 这样的十进制表示。如果预期行为是截去小数部分,可以先通过 float() 转换,再使用 int():

本节中的代码以及显示的标签或输出仍为英文。

values = ["3.8", "-2.4"]
integers = [int(float(value)) for value in values]
print(integers)
[3, -2]

转换为 int 时会向零截断,而不是四舍五入。如果任务要求舍入,请明确选择并应用相应规则。将非常大的十进制字符串转换为浮点数时,也要考虑精度限制。

对于已经同时包含整数和数字字符串的列表,只转换字符串值:

values = [12, "7", 50]
integers = [int(value) if isinstance(value, str) else value for value in values]
print(integers)
[12, 7, 50]

这样会保留已有的整数,并解析字符串。这个类型检查不能保证任意对象或格式错误的字符串都能安全转换:如果输入中可能有不可信的值,请验证实际输入,并处理 ValueError。如果列表中的值已经全是整数,则无需转换。