首页 > 解决方案 > 如何显示温度最低价差最低的一天

问题描述

作为新程序员解决问题。问题是在 weather.csv 中,您会找到每日天气数据。编写程序读取文件,然后输出温度分布最小的天数(第一列)(第二列最高温度,第三列最低)。

我在这里公开了 weather.csv 文件的列表https://docs.google.com/spreadsheets/d/1fMxCY_CdpdhDjMZZWGzyh-whEvZYxH2XiBfA4AfqZJw/edit#gid=0

我试图对我的列表进行排序,我试图打印 min(day_spread),它返回“TypeError:'int' object is not iterable”。我完全不知道从这里到哪里使用我的代码。谢谢!

编辑:我添加了 tot_spread 并将 day 设为 int。

import csv


with open("weather.csv", 'r') as infile:
    reader = csv.reader(infile, delimiter=',')
    header = next(reader)
    for row in reader:
        day = int(row[0])
        max_weather = int(row[1])
        min_weather = int(row[2])
        day_spread = (max_weather - min_weather)
        tot_spread = [day, day_spread]
        print(min(tot_spread)

标签: pythoncsvparsing

解决方案


您可以使用 走这条路线min,但您仍然需要列出所有日/价差对,然后从该列表中返回最小值。

import csv

spreads = [] # list for all values

with open("weather.csv", 'r') as infile:
    reader = csv.reader(infile, delimiter=',')
    header = next(reader)
    for row in reader:
        day = int(row[0])
        max_weather = int(row[1])
        min_weather = int(row[2])
        day_spread = (max_weather - min_weather)
        tot_spread = [day, day_spread]
        spreads.append(tot_spread) # add the pair to the list

# print the minimum
print(min(spreads, key=lambda x:x[1]))

key=lambda x:x[1]告诉min返回基于每对的第二个值的最小值,即点差。

作为替代方案,您可以存储当前最小值,并且对于每次迭代,检查新值是否低于当前值。如果您还不了解lambda等,这可能更容易理解:

import csv

min_spread = 99999 # some ridiculously high value
min_day = -1 # doesn't really matter what value

with open("weather.csv", 'r') as infile:
    reader = csv.reader(infile, delimiter=',')
    header = next(reader)
    for row in reader:
        day = int(row[0])
        max_weather = int(row[1])
        min_weather = int(row[2])
        day_spread = (max_weather - min_weather)

        # if the new value is lower than the current minimum,
        # take it as the new minimum
        if day_spread < min_spread:
            min_spread = day_spread
            min_day = day

# print the minimum
print(min_day)


推荐阅读