Python:将嵌套列表作为输入?

时间:2014-10-13 03:37:37

标签: python python-3.x

最好的方法是什么?

我想让用户输入嵌套列表,如下所示:

grid = input('Enter grid')

用户将输入如下网格:

[['', 'X', 'O'], ['X', 'O', ''], ['X', '', 'X']]

问题是我将此输入传递给期望输入为嵌套列表的函数。 当获取输入网格将是一个不能与我的函数一起使用的字符串。如果我 使用list()将网格转换为列表,它会生成一个包含每个网格包的列表,即[,[,','

在上面的表单中获取输入并将其转换为嵌套列表以传递给函数的好方法是什么?我希望输入值为嵌套列表,就好像它是由程序本身设置的。

由于

2 个答案:

答案 0 :(得分:1)

在checkctorG4dget发表评论时,请使用ast.literal_eval

>>> import ast
>>> ast.literal_eval("[['', 'X', 'O'], ['X', 'O', ''], ['X', '', 'X']]")
[['', 'X', 'O'], ['X', 'O', ''], ['X', '', 'X']]

要过滤掉无效输入,请抓住SyntaxError

>>> ast.literal_eval("[['', 'X', 'O'], ['X', 'O', ''], ['X', ', 'X']]")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/ast.py", line 46, in literal_eval
    node_or_string = parse(node_or_string, mode='eval')
  File "/usr/lib/python3.4/ast.py", line 35, in parse
    return compile(source, filename, mode, PyCF_ONLY_AST)
  File "<unknown>", line 1
    [['', 'X', 'O'], ['X', 'O', ''], ['X', ', 'X']]
                                               ^
SyntaxError: invalid syntax

答案 1 :(得分:0)

实际上,恕我直言,你可以简单地使用json.loads并告诉用户提供一个json,你的程序将更稳定/可用(即用户不需要事先了解python而只需要json这是一种标准格式。)

与相关列表对应的json基本上与您提供的相同(引号应为双引号,None应为null)。

import json
json.loads('[["", "X", "O"], ["X", "O", ""], ["X", "", "X"]]')
# [[u'', u'X', u'O'], [u'X', u'O', u''], [u'X', u'', u'X']]

json.loads('[[null, 1, ""], [null, null, 0]]')
# [[None, 1, u''], [None, None, 0]]

如果您知道自己没有疯狂价值(内有'的密钥(ex&#34; Texas Hold&#39; em&#34;)或包含{{1}的密钥(ex&#34; DaNone&#34;))然后你可以做基本的预处理来处理这些密钥(如果你不想强制简单的引用)

例如:

None

如果提供的输入是另一个程序的输出,那么def parse_input_to_list(input): input = input.replace("'", '"').replace('None', 'null') return json.loads(input) parse_input_to_list("[['', 'X', 'O'], ['X', 'O', ''], ['X', '', 'X']]") # [[u'', u'X', u'O'], [u'X', u'O', u''], [u'X', u'', u'X']] << the input you provided parse_input_to_list("[['null', 1, ''], [None, None, 0]]") # [[u'null', 1, u''], [None, None, 0]] parse_input_to_list('[[null, 1, ""], [null, null, 0]]') # [[None, 1, u''], [None, None, 0]] 用于数据交换的另一个程序的输出(这正是Json的用途)。而且你已经完成了。

如果绝对没有办法使用Json那么你可以使用@alsetru的ast解决方案,它可以正常工作。