【问题标题】:Can't figure out why my program is not creating a list无法弄清楚为什么我的程序没有创建列表
【发布时间】:2017-10-26 22:46:14
【问题描述】:

我需要将列表中的每个数字背靠背进行比较、减去并将​​结果添加到新列表中。 所以

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

等等

但我无法让它这样做。 这是我的块

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

未注释的“while”行现在返回

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

注释行只执行 [1]-[0] 和 [2]-[1],但正确执行并将它们附加到 change[]

我不知道为什么它只做这 2 个。但对于第一个,我觉得它与我的主要数据列表的长度和我要求它创建的列表的长度有关。

所以两个不同的问题,我无法弄清楚我错过了什么。

必要时提供完整代码

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)

【问题讨论】:

    标签: python-3.x list indexing range


    【解决方案1】:

    由于您的列表长度相同,并且其中一个索引 (popyear_up) 在前面,因此它会中断。相反,只能上index &lt; len(data_numbers) - 1

    另外,只需这样做:

    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)
    

    另外,只需这样做:

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

    或者如果你愿意(虽然这有点不太可读):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多