我有一系列值:
increase_pop = [500, -300, 200, 100]
我试图找到最低和最高值的索引。我的大部分代码都可以工作,除了一个问题外,一切似乎都很顺利。我的其余代码如下所示:
max_value = increase_pop[0]
min_value = increase_pop[0]
count = 0
while count < len(increase_pop):
if increase_pop[count] > max_value:
max_year = count
max_value = increase_pop[count]
elif increase_pop[count] < min_value:
min_value = increase_pop[count]
count += 1
print(min_value)
print(max_value)
这段代码让我得到了我想要的最小值和最大值。但是,我也想要那些职位的指数值。因此,对于最大值,我将分配变量max_year = count。因此,我认为max_year将被分配给找到max_value的位置的计数。但是,当我进行打印(max_year)时,我收到以下错误:
UnboundLocalError: local variable 'max_year' referenced before assignment
有谁知道我的(可能)小/小问题是什么?我忘记了什么?
答案 0 :(得分:2)
max_year
条件时分配 if
。但如果永远不会发生,max_year
永远不会被分配。当increase_pop[0]
(因此max_value
的初始值)是increase_pop
中的最大值时,就会发生这种情况:那么increase_pop[count] > max_value
将永远不会成真。
在您的代码中,您只需初始化max_year = count = 0
然而,IMO最好的,最恐怖的解决方案是Patrick Haugh的评论:
max_year, max_value = max( enumerate(increase_pop), key=lambda x: x[1] )
要解压缩:enumerate(increase_pop)
生成一系列对:
(0, increase_pop[0]), (1, increase_pop[1]), ...
并且max
运算符采用&#34;最大值&#34;这样的一对根据key
指定的标准(并且特定的关键函数只是说&#34;只考虑每对中的第二个值&#34;)。
答案 1 :(得分:2)
您可以使用list的功能使代码更加pythonic:
min_value = min(increase_pop)
max_value = max(increase_pop)
min_value_index = increase_pop.index(min_value)
max_value_index = increase_pop.index(max_value)