Ich habe eine Funktion buildFrequencyList
, die wie folgt funktionieren sollte:Python - Erstellen Sie eine Tupel-Liste nach den Zeichen Frequenzen im Eingangs
>>> L = []
>>> buildFrequencyList(L, 'bbaabtttaabtctce')
>>> L
[(4, 'b'), (4, 'a'), (5, 't'), (2, 'c'), (1, 'e')]
Hier ist der Code:
def buildFrequencyList(outputList, dataIN):
for c in dataIN:
a = 1
bo = True
if outputList == []:
outputList.append((a,c))
for i in outputList:
(a,b) = i
if b==c:
bo= False
a +=1
if(bo):
outputList.append((1,c))
return outputList
Aber der Ausgang tatsächlich ist:
[(1, 'b'), (1, 'a'), (1, 't'), (1, 'c'), (1, 'e')]
Ich weiß nicht warum. Kann mir jemand erklären, was das Problem ist?
bearbeiten:
modifizierte ich den Code, und ich habe wirklich merkwürdige Ausgabe:
def buildFrequencyList(outputList, dataIN):
for c in range(len(dataIN)):
if outputList == []:
outputList.append((1,dataIN[c]))
for i in range(len(outputList)):
(a,b) = outputList[i]
if b==dataIN[c]:
outputList[i] = (a+1,b)
else:
outputList.append((1,dataIN[c]))
return outputList
die Ausgabe:
[(5, 'b'), (4, 'a'), (3, 'a'), (2, 'b'), (2, 'b'), (5, 't'), (5, 't'), (5, 't'), (5, 't'), (5, 't'), (4, 't')...] # is infinite
Welche Ausgabe haben Sie erwartet? – jonrsharpe
[(4, 'b'), (4, 'a'), (5, 't'), (2, 'c'), (1, 'e')] –
Aber Sie aktualisieren nie tatsächlich die Werte In der Liste. Tupel und ganze Zahlen sind * unveränderlich *. – jonrsharpe