循环中Python中的count变量问题

时间:2016-10-04 14:32:53

标签: python loops

我有一系列值:

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

有谁知道我的(可能)小/小问题是什么?我忘记了什么?

2 个答案:

答案 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)