【问题标题】:Converting Input List that is read in String to List in Python将字符串中读取的输入列表转换为 Python 中的列表
【发布时间】:2020-02-03 16:59:24
【问题描述】:

我正在读取一个包含列表的文件。下面是输入文件。

[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]
[]

在不使用ast之类的库的情况下,我应该怎么做才能完成这个任务

【问题讨论】:

  • 你为什么不想使用ast?你为什么首先这样做?为什么不使用像jsonpickle 这样的内置序列化方法?

标签: python python-3.x list


【解决方案1】:

你可以使用 ast.literal_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)

【讨论】:

  • 感谢您的建议!但正如我之前提到的,我不想使用 ast。
  • 有什么理由不使用?
  • 我确信有一种方法可以在不使用库的情况下做到这一点。我正在为比赛做准备,我将无法记住比赛中的所有图书馆。我试图在 python 中解决这个问题。
  • 为了实践,我不想使用它。但是为了解决这个问题,我会立即使用 ast
  • @Khan 现在检查我的答案
【解决方案2】:

我会去掉结尾并用逗号分隔。

def str_to_list(s):
    return [int(i) for i in s.strip('][').split(',') if i]

【讨论】:

  • 太棒了!这是完美的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 2021-12-04
  • 1970-01-01
  • 2017-11-15
  • 2015-04-03
相关资源
最近更新 更多