2016-04-27 18 views
-2
def insertionSort(a): 
    for i in range(1, len(a)): #outer loop covering the range 
     value = a[i] #value = to list, which will compare items to the left 
     i = i - 1 #i goes lower than index to compare further to the left 
     while i >= 0 : #keep comparing till its at the beginning of the list 
      if value < a[i]: #if value is less than i 
       a[i+1] = a[i] # shift number in right i to slot i + 1 
       a[i] = value # shift value that was left into slot i 
       i = i - 1 
      else: 
       break 

infile = open("file1.txt", "r") 
a=[] 
for aline in infile: 
    a = aline.split() 

insertionSort(a) 
print(a) 

Dies ist, was in der Datei ist:Eine Liste aus einer Datei lesen?

7686850495948548545 

Wie erhalte ich die insertionSort() Funktion auf einer Datei zu arbeiten?

+0

Enthält die Datei alle Zahlen in einer Zeile? – trans1st0r

+1

Wenn Sie 'a = aline.split()' tun, wird keine Referenz außerhalb der Variablen 'a' gehalten, so dass die nächste Iteration in der for-Schleife diese mit der nächsten Zeile überschreibt, so dass Sie nur die Sortierung aufrufen auf ** die letzte Zeile der Datei. ** –

+0

Wenn Sie stattdessen 'a.extend (aline.split())' hätten, würden Sie die Liste um alle Wörter (oder Zahlen) in dieser Zeile erweitern und mit allen enden von ihnen nach der for-Schleife. –

Antwort

2

Dieser Teil ist nicht ganz richtig.

infile = open("file1.txt", "r") 
a=[] 
for aline in infile: 
    a = aline.split() 

Der bevorzugte Weg der Öffnung und Lesen (oder Schreiben) einer Datei ist die folgende:

with open('some_file.txt', 'r') as in_file: 
    string_numbers = in_file.read() 

Dann, wenn Sie die Zahlen in einer Reihe haben, können Sie sie in eine Liste verteilen kann wie so:

nums_list = list(string_nums) 

so ist nums_list jetzt eine Liste der Zeichenfolge, wandeln sie in ints mit Liste Verständnis:

nums = [int(num) for num in nums_list] 

EDIT:

nur zum Spaß, hier ist die kurze Version:

with open('filename.txt') as in_file: 
    nums = [int(n) for n in list(in_file.read().strip())] 

.strip() gerade hinzugefügt haben kein fremdes Leerzeichen Gießen zu gewährleisten.

+0

'string_nums.split()' macht nicht, was Sie denken. Sehen Sie sich das Ergebnis von ''768685049594848545'.split()' in der Python-Konsole an. – martineau

+0

Sie sind absolut, korrekt, ich meinte 'list (string_nums)'. Danke, bearbeitet. – Will

+0

danke! : +) –

0

Eines Ihrer Probleme ist die wiederholte Zuweisung an a. Das ist nicht was du willst. Jetzt beginnen Sie mit der Zuweisung einer leeren Liste an a. Dann ordnen Sie jede Zeile, zerlegt, a, jedes Mal ersetzen, was zuvor a zugewiesen wurde. Ich denke, was Sie tatsächlich in Ihrem wollen for-Schleife ist:

a.extend(aline.split()) 

Fix, dass und lassen Sie uns wissen, wie gut Ihr Code läuft dann.