将字符串中读取的输入列表转换为Python中的列表
我正在读一个有列表的文件。下面是输入文件将字符串中读取的输入列表转换为Python中的列表,python,python-3.x,list,Python,Python 3.x,List,我正在读一个有列表的文件。下面是输入文件 [1,2,3,4] [42] [1,1,2,3,5,8] [] 现在,正如你们所看到的,有一些列表被读取为字符串,我正试图将它转换成一个实际的列表。 下面是我正在使用的代码 _list = list(sys.stdin.readline().strip()) _final_list = [] for n in _list: try: n = int(n) except ValueError
[1,2,3,4]
[42]
[1,1,2,3,5,8]
[]
现在,正如你们所看到的,有一些列表被读取为字符串,我正试图将它转换成一个实际的列表。
下面是我正在使用的代码
_list = list(sys.stdin.readline().strip())
_final_list = []
for n in _list:
try:
n = int(n)
except ValueError:
continue
if isinstance(n, int):
_final_list.append(n)
现在我的代码可以正常工作,直到一个数字超过一位数。例如,42将变成4,2。这不是我想要的
我的代码生成以下结果
[1, 2, 3, 4]
[4, 2] <--- FALSE
[1, 1, 2, 3, 5, 8]
[]
[1,2,3,4]
[4,2]您可以使用ast.literal\u eval:
import ast
_final_list = []
for line in _list:
python_object = ast.literal_eval(line)
if isinstance(python_object, list):
_final_list.extend(python_object)
也可以使用正则表达式:
import re
_final_list = []
for line in _list:
my_list = [e.group() for e in re.finditer(r'\d+', line)]
_final_list.extend(my_list)
我会去掉结尾,用逗号分开
def str_to_list(s):
return [int(i) for i in s.strip('][').split(',') if i]
谢谢你的建议!但正如我前面提到的,我不想使用ast。有什么理由不使用它吗?我相信有一种方法可以不用库来实现。我正在准备比赛,我将无法记住比赛中所有的图书馆。我正试图用python解决这个问题。从实践角度来看,我不想使用它。但要解决这个问题,我会用ast对的away@Khan现在检查我的答案太棒了!这太完美了!您为什么不想使用ast
?你为什么要这么做?为什么不使用内置的序列化方法,如json
或pickle
?