无法理解特定的 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 行 继续(按要求): 然后使用字符串连接将 cmdargs 组合(阅读 here 以了解好的和坏的示例)导致“插入(0,5)“作为cmd的值 第 9 行(按要求): eval 参数是另一个字符串连接,产生“l.insert(0,5)”作为要解释的最终表达式。然后将整数值 5 插入到列表 l 中的点 0 上(向前推进 l 中已有的任何其他值)

希望对你有帮助,继续加油!

【讨论】:

以上是关于无法理解特定的 Python 3 代码的主要内容,如果未能解决你的问题,请参考以下文章

Python-3

为啥我的井字游戏代码无法检测到有人中奖了?蟒蛇 3

如何获取特定的 json 值 - python

Python代码:一行代码输出特定字符"Love"拼成的心形

python中对 函数 闭包 的理解

使用列表理解 Python 创建新列