我有一个包含一些城市和温度的文本文件,如下所示:
城市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)
答案 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]