2017-10-26 3 views
0

Ich muss jede Nummer in einer Liste vergleichen, zurückziehen, subtrahieren und das Ergebnis zu einer neuen Liste hinzufügen. soIch kann nicht herausfinden, warum mein Programm keine Liste erstellt

list1[1]-[0] = list2 [0] 
list1[2]-[1] = list2 [1] 

usw.

Aber ich kann es nicht bekommen, dies zu tun. Hier ist mein Block

change = [] 
index = 0 
popyear_up = 1 
popyear_low = 0 
while index < len(data_numbers): 
#for i in range, len(data_numbers: 
    difference = data_numbers[popyear_up] - data_numbers[popyear_low] 
    change.append(difference) 
    popyear_up += 1 
    popyear_low += 1 
    index += 1 

Die unkommentiert "während" Linie jetzt kehrt

difference = data_numbers[popyear_up] - data_numbers[popyear_low] 
IndexError: list index out of range 

Die Kommentarzeile nur, dass [1] - [0] und [2] - [1], aber macht sie richtig und hängt sie an, um sie zu ändern []

Ich habe keine Ahnung, warum es nur diese 2 tut. Aber für die erste habe ich das Gefühl, dass es etwas mit der Länge meiner Hauptliste von Daten und der Länge von zu tun hat die Liste, die ich erstelle, um sie zu erstellen.

Also zwei verschiedene Probleme, und ich kann nicht für das Leben von mir herausfinden, was ich vermisse.

Voll Code bei Bedarf

file = input('File to open: ') 
infile = open(file, 'r') 
source_file = infile.readlines() 
infile.close() 
index = 0 
while index < len(source_file): 
    source_file[index] = source_file[index].rstrip('\n') 
    index += 1 

data_numbers = [int(i) for i in source_file] 


change = [] 
index = 0 
popyear_up = 1 
popyear_low = 0 
while index < len(data_numbers): 
#for i in range, len(data_numbers: 
    difference = data_numbers[popyear_up] - data_numbers[popyear_low] 
    change.append(difference) 
    popyear_up += 1 
    popyear_low += 1 
    index += 1 

#start_year = 1950 
#change_sum = float(sum(change)) 
#change_average = change_sum/len(change) 
#max_change = start_year + change.index(max(n)) + 1 
#min _change = start_year + change.index(min(n)) + 1 

#print('Average Change in Population:',change_average) 
#print ('Year with most population increas:',max_change) 
#print ('Year with lease population increas:',min_change) 

Antwort

0

Da Ihre Listen der gleichen Länge sind und einer der Indizes (popyear_up) ist eine voraus, wird es brechen. Gehen Sie stattdessen nur auf index < len(data_numbers) - 1.

Auch, dies zu tun:

change = [] 
popyear_up = 1 
popyear_low = 0 
for popyear_low in range(len(data_numbers) - 1): 
    difference = data_numbers[popyear_low + 1] - data_numbers[popyear_low] 
    change.append(difference) 

auch tun, nur dies:

change = [data_numbers[i + 1] - data_numbers[i] for i in range(len(data_numbers) - 1)] 

Oder, wenn Sie wollen (obwohl dies etwas weniger lesbar ist):

change = [y - x for x, y in zip(data_numbers, data_numbers[1:])] 
Verwandte Themen