【发布时间】:2017-08-26 14:28:07
【问题描述】:
代码来自 UVA。它是这样的:
考虑一个列表 (list = [])。您可以执行以下命令:
insert, print, remove, append, sort, pop, reverse.
初始化您的列表并读取后面的命令行的值,其中每个命令将属于上面列出的类型。按顺序遍历每个命令,并在你的列表上执行相应的操作。
输入: 第一行包含一个整数,表示命令的数量。 后续行的每一行都包含以下命令之一。
示例输入
12
insert 0 5
insert 1 10
insert 0 6
print
remove 6
append 9
append 1
sort
print
pop
reverse
print
样本输出
[6, 5, 10]
[1, 5, 9, 10]
[9, 5, 1]
我发现的一个巧妙的解决方案是:
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
我不太明白" ("+ ",".join(args) +") " 部分的工作原理。特别是为什么+ 在开头和结尾。一个解释会很棒。谢谢。
【问题讨论】:
-
而
+运算符连接字符串。 -
另外,你应该避免使用
eval如果字符串的来源是可信的,那么它很好,但它可能不是一个好习惯。有更好的方法来实现这一点。 -
@juanpa.arrivillaga 你能解释一些这样的方式吗?谢谢。
-
@juanpa.arrivillaga 我想我明白了
+在开始时末尾的标志是什么意思。他们正在添加不同的字符串。我想,不知何故,它们在函数“内部”或其他东西。 -
@Rio1210 here 是不需要
eval的方法的草图。
标签: python python-2.7