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