class LongestIncreasingSubsequence:
def getLIS(self, A, n):
# write code here
dp=[0 for i in range(n)]
dp[0]=1
max=0
print dp
for i in range(n):
now=0
if i!=0:
res=1
for j in range(i):
if A[i]>A[j]:
res=dp[j]
now=now +1
if now>=max:
max=now
dp[i]=res+1
else:
dp[i]=res
print dp
#return max(dp)
kk=LongestIncreasingSubsequence()
kk.getLIS([1,4,2,5,3],5)
其中dp 是一个以int类型为成员的list
而使用max()函数时却会报错
TypeError: 'int' object is not callable
是由什么原因导致的?
Votre fonction max reçoit une valeur de 0 dans la cinquième ligne. La fonction max est écrasée. Renommez votre variable afin qu'elle n'ait pas le même nom que la fonction de bibliothèque
.La raison est que, comme @rayleisure l'a dit, vous utilisez
max
ici comme référence à une variable de typeint
, ce qui donneprovoque non seulement l'échec de la fonction intégrée, mais provoque également :
C'est parce que vous avez appelé l'entier
max
,En bref, pensez à nommer les variables qui ne correspondent pas :
mots clés
Fonctions intégrées
Le nom de la bibliothèque standard ou de tout package/module utilisé
Même nom.
Digression
Les éléments suivants sont hors sujet
À en juger par votre code actuel, il semble que vous n'ayez besoin que d'écrire une fonction. Écrire cette classe semble redondant (à moins que vous ne fassiez une banque de questions en ligne ?)
Il n'est pas nécessaire de transmettre spécifiquement la longueur de la liste. Demander la longueur de la liste en Python peut être facilement effectué avec
len()
Pour le problème LIS, j'ai simplifié votre code :
Trouver uniquement la longueur de LIS :
Le LIS tout entier réclame sa sortie :
Test :
Résultat :
Questions auxquelles j'ai répondu : Python-QA