如何使用循环当前引用的位置来更新变量?

时间:2019-07-14 14:03:54

标签: python

我有一个输入列表,并且使用for循环搜索每个值以找到最高温度以及列表中的哪个位置。

我已经完整地编写了代码,除了我不知道要用我的循环正在查看的当前位置来更新best_position。

    # set best_position to position
    best_position =

这就是我在努力的地方。

# initialise the input with a non-empty list - Do NOT change the next line
temperatures = [4.7, 3, 4.8]
# set best_position to 0
best_position = 0
maxtemp = temperatures[0]
# for each position from 1 to length of list – 1:
for i in temperatures:
    # if the item at position is better than the item at best_position: 
    if maxtemp<i:
        maxtemp = i
        # set best_position to position
        best_position =
# print best_position
print(best_position, ": 00")

2 个答案:

答案 0 :(得分:5)

使用enumerate函数:

https://docs.python.org/3/library/functions.html#enumerate

# initialise the input with a non-empty list - Do NOT change the next line
temperatures = [4.7, 3, 4.8]
# set best_position to 0
best_position = 0
maxtemp = temperatures[0]
# for each position from 1 to length of list – 1:
for pos, t in enumerate(temperatures):
    # if the item at position is better than the item at best_position: 
    if maxtemp<t:
        maxtemp = t
        # set best_position to position
        best_position = pos
# print best_position
print(best_position, ": 00")

或者,您可以执行以下操作:

max_temp = max(temperatures)
best_pos = temperatures.index(max_temp)
print(best_pos, ": 00")

答案 1 :(得分:2)

如果要坚持使用for循环,可以使用enumerate,如@abdusco的答案所述。另外,您可以使用Python的功能并做一个不错的内置单线:

print(max(range(len(temperatures)), key=lambda i: temperatures[i]), ": 00")

,它将用作:

>>> temperatures = [4.7, 3, 4.8]
>>> print(max(range(len(temperatures)), key=lambda i: temperatures[i]), ": 00")
2 : 00

要分解它:

  • max函数返回列表索引之间的最大值。
  • 但不是按值比较它们,而是按列表中该索引处的值比较