代码来自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) +") "
是如何运作的。特别是为什么+
在开始和结束时。解释会很棒。感谢。
答案 0 :(得分:0)
.split
会将您的字符串分成数组。每个空格都会创建一个新元素,因此如果您有"I like food"
,它将变为["I","like","food"]
。现在我们可以查看我们的.join
。 .join
正在做相反的事情。因此,如果我们致电','.join(["I","like","food"])
,我们就会获得"I,like,food"
。在你的函数中,我们使用.join
将一系列列表元素组合成一系列字符串参数,然后我们调用eval
并执行它。
并且eval
不推荐。因此,我们可以为if
和elif
语句编写一个链:
inpu = """12
insert 0 5
insert 1 10
insert 0 6
print
remove 6
append 9
append 1
sort
print
pop
reverse
print"""
li = []
for line in inpu.split("\n"):
args = line.split()
if args[0] == "insert":
li.insert(int(args[1]),int(args[2]))
elif args[0] == "print":
print(li)
elif args[0] == "remove":
li.remove(int(args[1]))
elif args[0] == "sort":
li.sort()
elif args[0] == "reverse":
li = li[::-1]
elif args[0] == "append":
li.append(int(args[1]))
elif args[0] == "pop":
li.pop()