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

Python 如何将字符串列表转换为整数列表?,python,python-2.7,Python,Python 2.7,假设我有一个字符串:line=“[1,2,12]\n” 我想把它转换成一个整数列表:[1,2,12] 我有一个解决方案: new_list = [] for char in line: try: new_list.append(int(char)) except ValueError: pass 但这在数字超过一位数的情况下不起作用。有没有一种内在的/更好的方法可以做到这一点?谢谢您可以使用正则表达式: import re line = "[1,

假设我有一个字符串:
line=“[1,2,12]\n”

我想把它转换成一个整数列表:
[1,2,12]

我有一个解决方案:

new_list = []
for char in line:
    try:
        new_list.append(int(char))
    except ValueError:
        pass
但这在数字超过一位数的情况下不起作用。有没有一种内在的/更好的方法可以做到这一点?谢谢

您可以使用正则表达式:

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]

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
循环将每个字符串元素转换为数字。

Regex和列表理解: 正则表达式:
\d+
将有一个或多个重复(
+
)或上一个
重复(
\d
),因此在本例中是一个
数字(
\d
)。因此,我们可以通过使用
re.findall()
查找该字符串的所有匹配项来在字符串中使用它

但是,这将返回
int
1
2
12
列表,但作为字符串,因此我们可以使用列表理解将其转换为
int
类型

您的代码可能如下所示:

import re

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

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

print(l)

这将给出列表:
[1,2,12]

这与我使用的
regex
相同!但是它将
int
作为
字符串返回,因此您可以在一行列表中轻松地转换它们。除了
语句之外,没有必要进行
尝试,因为您的问题与OP的问题不同。for循环在原始
字符串中没有循环通过
chars
,而是循环通过
regex
的结果,因此无需测试它是否可以转换为int,因为
regex
将只返回
ints
)@JoeIddon是的,你有很好的lambda。