我有以下代码:
N1 = int(input())
a = set(list(map(int, input().split())))
N2 = int(input())
for i in range(N2):
b = input().split()
c = set(list(map(int, input().split())))
a.b[0](c)
print(sum(a))
对于典型输入,列表b
如下所示:
b = ['intersection_update', '10']
a.b[0](c)
有什么问题?显然我没有正确评估它。
这个概念看起来很好,但似乎set a
无法获取实际上是列表元素的属性。
我想评估的是:
a.intersection_update(c)
这是我得到的错误:
Traceback (most recent call last):
File "solution.py", line 7, in
a.b[0](c)
AttributeError: 'set' object has no attribute 'b'
答案 0 :(得分:1)
我认为您想使用getattr
来获取一个名称存储为另一个变量中的字符串的属性:
getattr(a, b[0])(c)
您当前的代码正在b
集上寻找名为a
的属性。
答案 1 :(得分:1)
您无法使用Python中的点运算符进行此类间接属性访问。请改用getattr()
:
>>> a = {1, 2, 3, 4, 5}
>>> c = {3, 4, 5, 6, 7}
>>> b = ['intersection_update', '10']
>>> getattr(a, b[0])(c)
>>> a
{3, 4, 5}