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

Python:将嵌套列表作为输入?,python,python-3.x,Python,Python 3.x,进行以下操作的最佳方式是什么 我想让用户输入一个嵌套列表,如下所示: grid = input('Enter grid') 用户将输入这样的网格: [['', 'X', 'O'], ['X', 'O', ''], ['X', '', 'X']] 问题是我正在将此输入传递给一个函数,该函数希望输入是一个嵌套列表。 当获取输入网格时,它将是一个字符串,不能与我的函数一起工作。如果我 使用list()键入convert grid to a list,它会生成一个包含每个网格章程的列表,即[,[,'

进行以下操作的最佳方式是什么

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

grid = input('Enter grid')
用户将输入这样的网格:

[['', 'X', 'O'], ['X', 'O', ''], ['X', '', 'X']]
问题是我正在将此输入传递给一个函数,该函数希望输入是一个嵌套列表。 当获取输入网格时,它将是一个字符串,不能与我的函数一起工作。如果我 使用
list()
键入convert grid to a list,它会生成一个包含每个网格章程的列表,即
[,[,','

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


感谢inspectorG4dget评论,请使用:

要筛选出无效输入,请捕获:

>>ast.literal_eval(“[['''X','O'],['X','O','''],','X']”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python3.4/ast.py”,第46行,文本形式
node_或_string=parse(node_或_string,mode='eval')
文件“/usr/lib/python3.4/ast.py”,第35行,在parse中
返回编译(源、文件名、模式、仅PyCF\u AST)
文件“”,第1行
[X',[O'],[X',[O','],[X','X','X']
^
SyntaxError:无效语法

事实上,IMHO,你可以简单地使用json.load并告诉用户提供一个json,你的程序将更加稳定/可用(即用户不需要事先了解python,只需要了解标准格式的json)

与所讨论的列表相对应的json基本上与您提供的相同(引号应该是双引号,不应该为null)

如果您知道您没有疯狂的值(内有
'
的键(例如“Texas Hold'em”)或包含
(例如“DaNone”)的键),那么您可以在手前进行基本的预处理来处理这些键(如果您不想强制使用简单的引号)

例如:

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]]
def parse_input_to_list(输入):
input=input.replace(“,”).replace('None','null'))
返回json.loads(输入)
将_输入_解析到_列表(“[[''X','O'],['X','O','”,“,'X','X']”)

#[[u'、u'X'、u'O']、[u'X'、u'O'、u']、[u'X'、u'X']]我想您正在寻找的是,用户在一个单独的输入中输入行不是更容易些,比如
'XO'
'XO'
'X'
?然后您可以创建
列表
,并将其附加到行列表中。感谢您建议使用
ast.literal\u eval
而不是
evil.eval
。不过,通过引号的更改,也可以将其解析为json。
>>> 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
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]]
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]]