如何将字符串列表转换为整数列表?

3

假设有一个字符串:line = "[1, 2, 12]\n"
需要将其转换为整数列表:[1, 2, 12]

以下是解决方法:

new_list = []
for char in line:
    try:
        new_list.append(int(char))
    except ValueError:
        pass

但是对于多位数的数字,这种方法不起作用。是否有更好的内置方法来解决这个问题?谢谢。

3个回答

2
new_list = [int(num) for num in line.strip('[]\n').split(', ')]

一个更易读的解决方案将是:
line = line.strip('[]\n')
list_of_strs = line.split(', ')
list_of_nums = []
for elem in list_of_strs:
   list_of_nums.append(int(elem))

首先,第一行被去掉了封闭括号和换行符。然后剩余的字符串被逗号分隔,并保存在列表中。现在我们有了一个元素列表,其中每个数字仍然是一个字符串。接下来,for循环将每个字符串元素转换为数字。


0

你可以使用正则表达式:

import re
line = "[1, 2, 12]\n"
new_list = []
for char in re.findall("\d+", line):
    try:
        new_list.append(int(char))
    except ValueError:
        pass
print(new_list)

结果:[1, 2, 12]


这是我使用的相同的 regex!但它将 ints 返回为 strings,因此您可以在一行列表理解中轻松转换它们。由于您没有遇到 OP 遇到的相同问题,所以不需要 try, except 语句。for 循环不是在原始 string 中循环 chars,而是在 regex 的结果中循环,因此无需测试是否可以将其转换为 int,因为您的 regex 只会返回 ints。 :) - Joe Iddon
@JoeIddon 是的,你有一个不错的 Lambda。 - BladeMight

0

正则表达式和列表推导式:

正则表达式:\d+指的是一个或多个重复(+)前面的RE,在本例中为一个数字\d)。因此,我们可以使用re.findall()找到字符串中所有与之匹配的内容。

然而,这将返回一个整数列表,即1212,但是它们以字符串形式出现,因此我们可以使用列表推导式将它们转换为int类型。

您的代码可能如下所示:

import re

s = "[1, 2, 12]\n"

l = [int(i) for i in re.findall("\d+", s)]

print(l)

这将返回列表:[1, 2, 12]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接