尝试解决Hackerank(The Problem)上的问题时。我检查了解决此问题的人员的解决方案。这是一个人的解决方案-
n = input()
l = []
for _ in range(n):
s = raw_input().split()
cmd = s[0]
args = s[1:]
if cmd !="print":
cmd += "("+ ",".join(args) +")"
eval("l."+cmd)
else:
print l
我无法理解第8行和第9行,有人可以向我解释这些行吗?我在学习Python 3时可以在Python 3中写第8行和第9行吗?怎么样?
答案 0 :(得分:1)
基本上,通过将命令(例如“插入”)附加到操作数来构造cmd。此cmd形成正确的python表达式(例如l.insert(0,5),以在列表l中的索引0处插入5)。
这里,l。进行了硬编码(第9行的开始),在cmd = s [0]中初始化了cmd,并在第8行中添加了操作数。
eval(str)以字符串格式评估命令str,就像在命令行中一样。
答案 1 :(得分:0)
只包含问题将是一件很不错的事:)。输入的是一个(文本)文件,如下所示:
Sample Input 0
12
insert 0 5
insert 1 10
insert 0 6
print
remove 6
append 9
append 1
sort
print
pop
reverse
print
正确答案的预期输出如下:
Sample Output 0
[6, 5, 10]
[1, 5, 9, 10]
[9, 5, 1]
在查看您引用的答案之前,最好先读一下eval;它采用提供的参数,并尝试使用全局和本地名称空间将其作为python表达式运行。因此,在这种情况下,它只需要"l"
-list和"cmd"
-tuple的本地变量。
正在发生的事情如下:
cmd
)单值列表是通过切片(cmd = s[0]
)从行中解析出来的,因为每一行都以list方法开头或只有一个list方法。args
l
给出了“插入”,为"(0, 5)"
给出了cmd
了cmd
与args
合并(读here一个好例子,结果是“ cmd
”的值“插入(0,5)” 5
插入列表l
的位置0上(向前推l
中已经存在的其他任何值)希望它会有所帮助,继续加油!