说我有一个字符串: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))
首先line
被剥离封闭括号和换行符。然后剩下的字符串以逗号分隔,结果保存在列表中。现在我们有一个元素列表,其中每个数字仍然是一个字符串。然后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+
会一次或多次重复(+
),或在这种情况下digit
(\d
)以前RE
左右。所以,我们可以通过re.findall()
查找所有匹配的字符串来使用它。
然而,这将返回ints
的list
: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有同样的问题,因此不需要尝试,除了''语句。 for循环没有循环通过原来的'string'中的'chars',它循环遍历'regex'的结果,因此不需要测试它是否可以转换为int,因为'regex'只会返回'ints'。 :) –
@JoeIddon是的,你有很好的lambda。 – BladeMight