gpt4 book ai didi

python - 如何从 python 中的列表列表中获取 n 个最大的列表

转载 作者:太空狗 更新时间:2023-10-29 21:52:40 25 4
gpt4 key购买 nike

我正在使用 heapq 从列表列表中获取 nlargest 元素。下面是我写的程序。

import csv
import heapq
f = open("E:/output.csv","r")
read = csv.reader(f)

allrows = [row for row in read]

for i in xrange(0,2):
print allrows[i]

allrows.sort(key=lambda x: x[2]) #this is working properly
it=heapq.nlargest(20,enumerate(allrows),key=lambda x:x[2]) #error

我只想要前 20 个元素。所以我没有考虑排序而是使用堆。我得到的错误是,

  Traceback (most recent call last):
File "D:\eclipse_progs\DaDv\IMDB\Assignment1.py", line 42, in <module>
it=heapq.nlargest(2,enumerate(allrows),key=lambda x:x[2])
File "C:\Python27\lib\heapq.py", line 470, in nlargest
result = _nlargest(n, it)
File "D:\eclipse_progs\DaDv\IMDB\Assignment1.py", line 42, in <lambda>
it=heapq.nlargest(2,enumerate(allrows),key=lambda x:x[2])
IndexError: tuple index out of range

我能知道我为什么会收到错误以及如何解决它吗?我缺少使用 heapq 的任何属性。

最佳答案

enumerate() 返回一个可迭代的 2 元组。因此,在您的第二个示例中访问 x[2] 总是会超出范围(唯一有效的索引是 0 和 1)。

要使第二个示例等同于第一个示例,您应该直接传递 allrows 而不是使用 enumerate():

it = heapq.nlargest(20, allrows, key=lambda x:x[2])

如果您需要保留原始索引,enumerate() 是可行的方法。但是,您还需要在关键函数中使用额外的间接级别:

it = heapq.nlargest(20, enumerate(allrows), key=lambda x:x[1][2]) 
^^^^^^^^^ ^^^

关于python - 如何从 python 中的列表列表中获取 n 个最大的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27183592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com