从文本文件中显示温度较高的5个城市

时间:2015-04-24 17:56:51

标签: python

我有一个包含一些城市和温度的文本文件,如下所示:

城市1 16

城市2 4

...

City100 20

我正在向温度更高的城市展示代码如下。

但我想展示温度较高的5个城市。你有没有办法做到这一点?我在这里做了一些测试,但我总是在同一个城市展示5次。

#!/usr/bin/env python

import sys

current_city = None
current_max = 0
city = None


for line in sys.stdin:
    line = line.strip()

    city, temperature = line.rsplit('\t', 1)

    try:
        temperature = float(temperature)
    except ValueError:
        continue

    if temperature > current_max:
        current_max = temperature
        current_city = city

print '%s\t%s' % (current_city, current_max)

5 个答案:

答案 0 :(得分:1)

您可以使用heapq.nlargest

import sys
import heapq


# Read cities temperatures pairs
pairs = [
    (c, float(t))
    for line in sys.stdin for c, t in [line.strip().rsplit('\t', 1)]
]

# Find 5 largest pairs based on second field which is temperature
for city, temperature in heapq.nlargest(5, pairs, key=lambda p: p[1]):
    print city, temperature

答案 1 :(得分:1)

我喜欢熊猫。这不是一个完整的答案,但我喜欢鼓励人们进行研究。看看这个......

listA = [1,2,3,4,5,6,7,8,9]

import pandas as pd


df = pd.DataFrame(listA)

df.sort(0)

df.tail()

使用Pandas,您将需要了解Series和DataFrames。 DataFrames有很多功能,你可以命名你的列,直接从输入文件创建,几乎任何东西排序。有头部和尾部的常见unix单词(beggining和end),你可以指定返回的行数....等等等等等等等等等等。我喜欢这本书“Python for Data Analysis”。

答案 2 :(得分:0)

将温度和城市列表存储在列表中。对列表进行排序。然后,取最后5个元素:它们将是你的五个最高温度。

答案 3 :(得分:0)

将数据读入列表,对列表进行排序,并显示前5:

[~,~,idx] = unique(M(1:3,:)','rows')  %//'
valid = ismember(M(4,:),V)
valid_idx = accumarray(idx(valid),M(4,valid).',[],@(x) ...
                                 numel(unique(x)))>=numel(V) %//'
out = M(:,ismember(idx,find(valid_idx)))

这将城市,温度对存储在列表中,然后对其进行排序。 cities = [] for line in sys.stdin: line = line.strip() city, temp = line.rsplit('\t', 1) cities.append((city, int(temp)) cities.sort(key=lambda city, temp: -temp) for city, temp in cities[:5]: print city, temp 中的key函数告诉列表按温度降序排序,因此列表sort的前5个元素是温度最高的五个城市。

答案 4 :(得分:0)

以下代码可以完全满足您的需求:

fname = "haha.txt"
with open(fname) as f:
content = f.readlines()

content = [line.split(' ') for line in content]
for line in content:
    line[1] = float(line[1])

from operator import itemgetter
content = sorted(content, key=itemgetter(1))

print content

获得最高温度的国家:

print content[-1]

获得温度最高的5个国家:

print content[-6:-1]