问题描述
https://code.sololearn.com/cRcr0h9XTJt0/?ref=app
arr =["(2,2),(2,2)"]
print(len(arr))
outputrequired = []
outputrequired = [[2,2],[2,2]]
print(len(outputrequired)
解决方法
您的arr
是一个只有一个元素的列表:一个字符串。使用eval()
进行解析似乎是一个不错的选择,但为了安全地进行解析,您应该使用ast.literal_eval
。
现在,如果我们这样做:
from ast import literal_eval
arr = ["(2,2),(2,2)"]
evaluated = literal_eval(arr)
print(evaluated)
...我们收到一个错误:
ValueError: malformed node or string: ['(2,2)']
arr
不是字符串,但是将arr
转换为字符串并将其传递给literal_eval
是可行的,但是它什么也没做,只是返回相同的{ {1}}
我们需要做的是将arr
的第一个(也是在这种情况下)转换为元组列表,而不是当前的字符串。
因此,我们将arr
传递给arr[0]
,它返回以下内容:
literal_eval
from ast import literal_eval
arr = ["(2,2)"]
evaluated = literal_eval(arr[0])
print(evaluated)
tuple个元组。我们越来越近了。要将元组转换为字符串,我们只需执行以下操作:
((2,2))
我们的元组列表存储在变量list(tuple)
中,因此要执行以下操作将其转换为列表:
evaluated
...返回以下内容:
list(evaluated)
甚至更近。要将[(2,2)]
中的元组转换为列表,我们可以使用列表理解:
evaluated
这基本上翻译为:
outputrequired = [list(t) for t in evaluated]
这只是一种更有效的方法。
无论如何,这是outputrequired = []
for t in evaluated:
outputrequired.append(list(t))
的结果:
outputrequired
列表列表。
完整代码:
[[2,2],[2,2]]