为了账号安全,请及时绑定邮箱和手机立即绑定

在集合上执行 Pop、Discard 和 Remove 命令

在集合上执行 Pop、Discard 和 Remove 命令

鸿蒙传说 2022-12-20 11:13:20
如果有人可以帮助理解以下评估逻辑以及如何在这种情况下应用特定方法。n = int(input())s = set(map(int, input().split()))for i in range(int(input())):    eval('s.{0}({1})'.format(*input().split()+['']))print(sum(s))上面的代码工作得很好,我正在尝试详细了解该函数的工作原理。这是问题的参考。
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

欢迎来到计算器。如果您是 Python 的初学者,我建议您阅读Python 文档,它们为理解 Python 提供了很好的资源。

对于这个问题,你需要阅读https://docs.python.org/3/library/functions.html

好的,让我们逐行分解代码。

n = int(input())

从 stdin 获取输入字符串,然后将其转换为int数据类型。然后存入变量n

s = set(map(int, input().split()))

接受一个输入,并在每个空白处拆分它。例如,如果输入是1 2 3,它将是一个列表[1, 2, 3]。然后,将列表的每个元素转换为 int 数据类型。然后,将列表转换为集合。然后将其存储到变量s中。

for i in range(int(input())):

从 0 迭代到输入的字符串并转换为 int 数据类型为i

    eval('s.{0}({1})'.format(*input().split()+['']))

好的,这会有点棘手。

首先,尝试了解 Python 格式,我建议您阅读https://pyformat.info/。总之,"string {0}, {2}, {1}".format("a", "b", "c")会给你一串"string a, c, b"

在这种情况下,格式将采用 2 个参数,因为string 中有{0}和,它来自语句。{1}'s.{0}({1})'*input().split()+['']

Python 将input().split()首先执行,获取输入并将其拆分为列表。然后将该列表与另一个列表合并,即['']. 之后,将列表元素作为格式的参数展开。

例如,如果您有输入

remove 9

它将调用这样的格式

's.{0}({1})'.format("remove", "9", "")

# will be

's.remove(9)'

"remove 9" -> ["remove", "9"] -> ["remove", "9", ""] -> "remove", "9", "" (as function argument)

好吧,但这是+['']为了什么?对于只有一个单词的输入的格式化程序来说,这是一种技巧。


例如


's.{0}({1})'.format("pop", "")

# will be

's.pop()'

Eval 函数接受一个参数,即字符串。它会将字符串作为 Python 代码执行。因此,eval("print(1)")将打印1到控制台。


print(sum(s))

打印集合的总和s


我希望我解释得足够清楚


查看完整回答
反对 回复 2022-12-20
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

这也是一个很好的替代解决方案:


n = int(input())

s = set(map(int, input().split()))

d = {"pop":s.pop, "remove":s.remove, "discard": s.discard}

for _ in range(int(input())):

    c = input().split()

    d[c[0]](int(c[1])) if len(c)>1 else d[c[0]]()

print(sum(s))


查看完整回答
反对 回复 2022-12-20
  • 2 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号