【问题标题】:The use of **.join()** in this particular code [duplicate]在此特定代码中使用 **.join()** [重复]
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-11-03
    • 2019-07-02
    • 2016-06-03
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多