假设有一个字符串:line = "[1, 2, 12]\n"
需要将其转换为整数列表:[1, 2, 12]
以下是解决方法:
new_list = []
for char in line:
try:
new_list.append(int(char))
except ValueError:
pass
但是对于多位数的数字,这种方法不起作用。是否有更好的内置方法来解决这个问题?谢谢。
假设有一个字符串:line = "[1, 2, 12]\n"
需要将其转换为整数列表:[1, 2, 12]
以下是解决方法:
new_list = []
for char in line:
try:
new_list.append(int(char))
except ValueError:
pass
但是对于多位数的数字,这种方法不起作用。是否有更好的内置方法来解决这个问题?谢谢。
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
循环将每个字符串元素转换为数字。
你可以使用正则表达式:
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]
。
正则表达式:\d+
指的是一个或多个重复(+
)前面的RE
,在本例中为一个数字
(\d
)。因此,我们可以使用re.findall()
找到字符串中所有与之匹配的内容。
然而,这将返回一个整数
列表,即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
!但它将ints
返回为strings
,因此您可以在一行列表理解中轻松转换它们。由于您没有遇到 OP 遇到的相同问题,所以不需要try, except
语句。for 循环不是在原始string
中循环chars
,而是在regex
的结果中循环,因此无需测试是否可以将其转换为 int,因为您的regex
只会返回ints
。 :) - Joe Iddon