在Python中从列表中获取n个最大项

0 投票
3 回答
959 浏览
提问于 2025-04-17 20:52

我有一个这样的列表 -

data = [[u'Alabama', 290060.0, 694020.0, 1452300.0, 1.093, 4.007, u'US-AL'], [u'Alaska', 46400.0, 160760.0, 300840.0, 0.871, 5.484, u'US-AK'], [u'Arizona', 320320.0, 1017020.0, 2234400.0, 1.197, 5.976, u'US-AZ'], [u'Arkansas', 295280.0, 535040.0, 896900.0, 0.6759999999999999, 2.0380000000000003, u'US-AR']]

注意 - 这个列表包含了所有50个州的数据。我想从中找出NOFU2008最高的前10个州。我希望数据看起来像这样 -

data2008 - [[u'Alabama', 290060.0], [u'Alaska', 46400.0], [u'Arizona', 320320.0], [u'Arkansas', 295280.0]]

注意 - data2008只是个例子。我想要的是NOFU2008最高的州。

3 个回答

0

根据我对这个问题的理解,“NOFU”是列表中州名后面的第二个元素。如果是这样的话,你需要的就是这个:

res = [[item[0], item[1]] for item in data]
print sorted(res, key=lambda x: x[1], reverse=True)[:10]

因为列表中的元素最多只有50个,所以我觉得这样做效率应该足够高。

0

计算这个问题有一个非常简单的方法:

data2008 = [stShort[0:2] for stShort in sorted(data, key=lambda stLine: stLine[1], reverse=True)][0:10]
1
[state[0:2] for state in heapq.nlargest(10, data, operator.itemgetter(1))]

这就是“官方”的回答。要从50个州中选出10个,使用heapq.nlargestsorted之间的区别可能没什么大不了的。所以你可以选择使用:

data.sort(key=operator.itemgetter(1), reverse=True)
[state[0:2] for state in data[0:10]]

撰写回答