无法理解特定的 Python 3 代码
Posted
技术标签:
【中文标题】无法理解特定的 Python 3 代码【英文标题】:Cannot understand specific Python 3 code 【发布时间】:2018-12-30 03:39:41 【问题描述】:在尝试解决 Hackerrank(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 行吗?怎么样?
【问题讨论】:
仅供参考:该代码非常不符合 Python 风格。 【参考方案1】:基本上,cmd 是通过将命令(比如“插入”)附加到操作数来构造的。此 cmd 形成一个正确的 Python 表达式(例如 l.insert(0,5),在列表 l 的索引 0 处插入 5)。
这里,l。是硬编码的(第 9 行开始),在 cmd = s[0] 中初始化 cmd,并在第 8 行添加操作数。
eval(str) 以字符串格式评估命令 str,就像它在命令行中一样。
【讨论】:
【参考方案2】:最好只包括问题:)。输入是一个(文本)文件,如下所示:
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 的本地。
发生的事情如下:
-
空列表 l 已创建。
“命令”(
cmd
) 单值列表通过切片 (cmd = s[0]
) 从行中解析出来,因为每一行都以列表方法开头或只有一个列表方法
其他参数放在args
第 8 行(按要求): 然后将这些其他参数连接到一个字符串元组中。所以 "insert 0 5" 为 l
和 "(0, 5)"
为 cmd
提供 "insert"
第 8 行 继续(按要求): 然后使用字符串连接将 cmd
与 args
组合(阅读 here 以了解好的和坏的示例)导致“插入(0,5)“作为cmd
的值
第 9 行(按要求): eval 参数是另一个字符串连接,产生“l.insert(0,5)”作为要解释的最终表达式。然后将整数值 5
插入到列表 l
中的点 0 上(向前推进 l
中已有的任何其他值)
希望对你有帮助,继续加油!
【讨论】:
以上是关于无法理解特定的 Python 3 代码的主要内容,如果未能解决你的问题,请参考以下文章