我有以下字符串:
string = '['1', '2', '3']'
我想把它变成一个int列表,这样我就可以在列表中添加每个int以获得6的输出
我目前有这段代码:
stripQuotes = ", ".join(string)
intList =[stripQuotes]
map(int, intList)
print(intList)
但我得到了输出:
['1, 2, 3']
而不是:
[1, 2, 3]
答案 0 :(得分:2)
您可以简单地使用正则表达式:
短:
import re
string = """'['1' ,'2', '3']'"""
pattern=r'(\d.*?)'
match=re.finditer(pattern,string)
print([int(integer.group()) for integer in match])
详细说明:
import re
string = """'['1' ,'2', '3']'"""
pattern=r'(\d.*?)'
int_list=[]
match=re.finditer(pattern,string)
for integer in match:
int_list.append(int(integer.group()))
print(int_list)
输出:
[1, 2, 3]
正如你所说:
所以我可以在列表中添加每个int以获得6
的输出
然后:
print(sum([int(integer.group()) for integer in match]))
输出:
6
答案 1 :(得分:1)
您没有转义将导致错误的内部字符串。您可以用双引号替换外部引号:"['1', '2', '3']"
或者您可以像这样转义内部引号:'[\'1\', \'2\', \'3\']'
(我个人更喜欢第一个)
from ast import literal_eval
string = "['1', '2', '3']"
int_list = [int(i) for i in literal_eval(string)]
print(int_list)
然后您只需使用sum()
对列表中的元素求和:
sum(int_list)
上的文档
答案 2 :(得分:0)
你可以评估:
listofstrings=eval(strings)
ints= [int(k) for k in listofstrings]
如果你想要输入安全性(如果我运行eval,我从不在晚上睡觉),这是一种更安全的方法:
elems= strings.split("'")
ints=[]
for k in elems:
try:
ints+=int(k)
答案 3 :(得分:0)
这会将字符串列表转换为整数列表
strList = ['1', '2', '3']
intList = [int(i) for i in strList]
答案 4 :(得分:-1)
您还可以使用地图功能来解决此问题。例如:
Python 2.x:
string = "['1', '2', '3']"
map(int, eval(string))
[1,2,3]
Python 3.x:
string = "['1', '2', '3']"
list(map(int, eval(string)))
[1,2,3]
答案 5 :(得分:-1)
您可以使用此代码
s1 = "['1', '2', '3']"
print(sum([int(x) for x in list(s1) if x.isnumeric()]))
将输出 6