我想找到一组数据中的最高温度,并将输出打印为“最热的温度是x in y”,其中x和y分别是温度和城市。我有这样的代码:
data = [['Sheffield', '41.2', '35.5', '41.1'],
['Lancaster', '31.3', '40.2', '37.9'],
['Southampton', '34.8', '33.9', '32',],
['Manchester', '41.9', '41.5', '44.2'],
['Bristol', '42.1', '37.1', '42.2']]
hot = []
for row in data:
for item in row:
if item == max(row[1:]):
hot.append(item)
if max(hot) in row:
print "The hottest temperature was {0} in {1}.".format(max(hot),row[0])
产生的输出:
The hottest temperature was 41.2 in Sheffield.
The hottest temperature was 44.2 in Manchester.
现在我对输出感到困惑。我想只打印一行输出,这应该是“曼彻斯特最热的温度是44.2”。因为44.2是数据中的最高温度。为什么“谢菲尔德最热的温度是41.2。”印刷呢?我在哪里弄错了?
答案 0 :(得分:1)
您在迭代时构建列表,max
正在列表中运行到目前为止。当你到达谢菲尔德时,它是迄今为止你见过的最热门的,所以它打印出来。但它无法知道曼彻斯特甚至更热,因为它还没有看到它。
解决这个问题的最快方法是做两个循环:一个用于构建列表,另一个用于查找最热门的循环。
(而且,曼彻斯特44.2?在你的梦中。)
答案 1 :(得分:1)
您检查每行hot
的最大值是否在row
,而不是在处理完所有行后检查一次。
试试这个:
hot = []
for row in data:
for item in row:
if item == max(row[1:]):
hot.append(item)
if max(hot) in row:
max_row = row
print "The hottest temperature was {0} in {1}.".format(max(hot),max_row[0])
另外,您将所有温度都存储为字符串,而不是浮点数。如果温度范围扩大得多,则可能会得到奇怪的结果(例如,'5' > '35.3'
为真。)
答案 2 :(得分:1)
data = [['Sheffield', '41.2', '35.5', '41.1'],
['Lancaster', '31.3', '40.2', '37.9'],
['Southampton', '34.8', '33.9', '32',],
['Manchester', '41.9', '41.5', '44.2'],
['Bristol', '42.1', '37.1', '42.2']]
hot = []
for row in data:
for item in row:
if item == max(row[1:]):
hot.append(item)
for row in data:
if max(hot) in row:
print "The hottest temperature was {0} in {1}.".format(max(hot),row[0])
尝试上面这个应该按预期工作......
答案 3 :(得分:0)
首先,我想说这不是做你想要的有效方式。但如果你想知道为什么会得到这个结果,我会为你解释一下;
答案 4 :(得分:0)
两条线,相当“pythonic”的方式:
hot = sorted([(max(x[1:]), x[0]) for x in data], key=lambda x: x[0])[-1]
print "The hottest temperature was {0} in {1}.".format(*hot)