AttributeError: 'int' - Objekt hat kein Attribut 'split'
Mache ich das merge-sort-in python, aber ich habe ein problem. Wenn ich versuche, legen Sie die Liste von der Konsole aus (eine Zahl pro Zeile die return-eine Liste von string -) ich kann es konvertieren in Integer-zahlen. Können Sie mir helfen das problem zu verstehen.
import sys
def mergeSort(lista):
res = []
for i in lista[0].split():
res.append(int(i))
if len(res)>1:
mid = len(res)//2
lefthalf = res[:mid]
righthalf = res[mid:]
mergeSort(lefthalf)
mergeSort(righthalf)
i=0
j=0
k=0
while i<len(lefthalf) and j<len(righthalf):
if lefthalf[i]<righthalf[j]:
res[k]=lefthalf[i]
i=i+1
else:
res[k]=righthalf[j]
j=j+1
k=k+1
while i<len(lefthalf):
res[k]=lefthalf[i]
i=i+1
k=k+1
while j<len(righthalf):
res[k]=righthalf[j]
j=j+1
k=k+1
print(res)
alist = []
for l in sys.stdin:
alist.append(l.strip())
mergeSort(alist)
Code Fehler sagt: AttributeError: 'int' - Objekt hat kein Attribut 'split'
Die Eingabe ist eine Datei (von der shell mit dem Befehl: "Python ist3 merge.py < data.txt") mit der Liste von zahlen, eine pro Zeile.
Beispiel:
2
3
0
12
11
7
4
Sollte return 0 2 3 4 7 11 12
Natürlich habe ich nicht eine Ausgabe, weil der Fehler
- All dies bedeutet, ist das erste Element in
lista
ist einint
Objekt, kein string. Irgendwie ist Ihr code ist angehängt eine ganze Zahl in der Liste sind Sie übergeben. Also das kann nicht sein ein komplettes code-Beispiel... - aber Sie sind alle eine Einheit string...
- Der einzige Ort, dein code zeigt, dass verwendet
str.split()
wird auf ein element einer Liste, die angeblich Zeichenfolgen enthält. Du bist wahrscheinlich nicht auf der Suche auf den gleichen code ausgeführt wird oder Sie nicht posten der gleiche code läuft bist du hier. - Ich schwören können der code ist der gleiche. Wenn ich versuche die Ausgabe der "lista", es gibt: '1\r3\r4\r56\r65\r3\r4\r3\r2\r9\r10'
- Ich sehe jetzt beim genaueren hinsehen. Wenn Sie anrufen
mergeSort
rekursiv sind Sie übergeben eine Liste von Integer-zahlen eher als eine Liste von strings. Sie sollten behandeln die Konvertierung von strings in Ganzzahlen außerhalb dermergeSort
routine. - Wenn du dies als Antwort gebe ich dir die 10 Punkte Mann!!!!!!
- Wenn Sie Zweifel haben,
pdb
ist dein Freund... - pdb? was ist es?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist Umwandlung einer Liste von strings in eine Liste von Integer-zahlen an der Spitze der
mergeSort
routine. Die nachfolgende rekursive AufrufemergeSort
versuchen, das gleiche zu tun, außer jetzt, um Listen von ganzen zahlen.Sollten Sie behandeln alle Datei-Analyse völlig getrennt von Ihrem
mergeSort
- routine, die entwickelt werden sollten, nur zu arbeiten, auf eine Liste von zahlen. Dies ist eine "separation of concerns".Wenn Sie wollen auch den index verwenden, können Sie
enumerate
:Für die Zukunft, können Sie debug etwa so:
lista
bevor die Schleife beginnt, und der Inhalti
am Anfang jeder iteration -- Sie möglicherweise nicht, was Sie erwarten.Sollte es
for i in lista
eher alsfor i in lista[0].split()
, und Sie können einfach erreichen, durch list comprehension:res = [int(num) for num in lista]
alist
enthält nur 1 element mit allen zahlen, das ist komisch.