2017-08-05 202 views
3

说我有一个字符串:line = "[1, 2, 12]\n"
,我想将其转换为整数的列表:[1, 2, 12]如何将字符串列表转换为整数列表?

我有解决方案:

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

但是,这并不在的情况下工作具有多个数字的数字。有没有内置/更好的方法来做到这一点?由于

回答

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)) 

首先line被剥离封闭括号和换行符。然后剩下的字符串以逗号分隔,结果保存在列表中。现在我们有一个元素列表,其中每个数字仍然是一个字符串。然后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]

+0

这是相同的'regex'我用的!但它将'ints'作为'strings'返回,因此您可以轻松地将它们转换为单行列表理解。由于您没有与OP有同样的问题,因此不需要尝试,除了''语句。 for循环没有循环通过原来的'string'中的'chars',它循环遍历'regex'的结果,因此不需要测试它是否可以转换为int,因为'regex'只会返回'ints'。 :) –

+0

@JoeIddon是的,你有很好的lambda。 – BladeMight

0

正则表达式和列表理解:

正则表达式:\d+会一次或多次重复(+),或在这种情况下digit\d)以前RE左右。所以,我们可以通过re.findall()查找所有匹配的字符串来使用它。

然而,这将返回intslist1212但作为字符串,所以我们可以使用列表理解到这些转换成类型int

你的代码可能看起来是这样的:

import re 

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

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

print(l) 

这会给名单:[1, 2, 12]

相关问题