在此特定代码中使用**。join()**

时间:2017-04-01 10:14:29

标签: python python-2.7

代码来自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) +") "是如何运作的。特别是为什么+在开始和结束时。解释会很棒。感谢。

1 个答案:

答案 0 :(得分:0)

.split会将您的字符串分成数组。每个空格都会创建一个新元素,因此如果您有"I like food",它将变为["I","like","food"]。现在我们可以查看我们的.join.join正在做相反的事情。因此,如果我们致电','.join(["I","like","food"]),我们就会获得"I,like,food"。在你的函数中,我们使用.join将一系列列表元素组合成一系列字符串参数,然后我们调用eval并执行它。

并且eval 推荐。因此,我们可以为ifelif语句编写一个链:

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()