无法理解特定的Python 3代码

时间:2018-07-22 14:21:58

标签: python python-3.x logic

尝试解决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行吗?怎么样?

2 个答案:

答案 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的本地变量。

正在发生的事情如下:

  1. 创建空列表l。
  2. “命令”(cmd)单值列表是通过切片(cmd = s[0])从行中解析出来的,因为每一行都以list方法开头或只有一个list方法。
  3. 其他参数放在args
  4. 第8行(根据要求):然后,将这些其他参数合并到字符串元组中。因此,“插入0 5”为l给出了“插入”,为"(0, 5)"给出了cmd
  5. 第8行(根据要求):然后,使用字符串串联将cmdargs合并(读here一个好例子,结果是“ cmd”的值“插入(0,5)”
  6. 第9行(按要求)::eval参数是另一个字符串连接,产生“ l.insert(0,5)”作为要解释的最终表达式。然后将整数值5插入列表l的位置0上(向前推l中已经存在的其他任何值)

希望它会有所帮助,继续加油!