Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串中读取的输入列表转换为Python中的列表_Python_Python 3.x_List - Fatal编程技术网

将字符串中读取的输入列表转换为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