2017-09-29 3 views
0

Ich habe den folgenden Code:Attribute: 'set' Objekt hat kein Attribut 'b'

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

Mit typischem Eingang die Liste b wie folgt aussieht:

b = ['intersection_update', '10'] 

Was ist das Problem mit a.b[0](c)? Anscheinend bewerte ich es nicht richtig.

Das Konzept scheint in Ordnung zu sein, aber es scheint, als ob a nicht in der Lage ist, ein Attribut zu nehmen, das tatsächlich ein Element einer Liste ist.

, was ich will ist bewerten:

a.intersection_update(c) 

hier der Fehler ist, erhalte ich:

Traceback (most recent call last): 
    File "solution.py", line 7, in 
    a.b[0](c) 
AttributeError: 'set' object has no attribute 'b' 

Antwort

1

Sie können diesen indirekten Attributzugriff nicht mithilfe des Punktoperators in Python ausführen. Verwenden Sie stattdessen 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} 
+1

danke, es hat funktioniert. Ich habe heute etwas Neues gelernt :) – hky404

1

Ich glaube, Sie wollen getattr verwenden, ein Attribut zu erhalten, der Name als String gespeichert ist in eine andere Variable:

getattr(a, b[0])(c) 

Ihr aktueller Code sucht nach einem Attribut mit dem Namen b auf dem a Set.

Verwandte Themen