我目前有一个列表列表(让我们将其命名为“大”),大约有 9 列和 5000 行,并且还在不断增长。我有另一个列表(让我们将这个列表命名为“小”),其中包含大约 3000 个元素。我的目标是返回大中的每一行,其中可以在小中找到大[8]。结果将存储在列表列表中。
我使用了列表理解,它返回了正确的输出,但它对于我的需求来说效率太低了。处理这 5000 行需要几秒钟的时间(通常需要 6.5 秒左右,列表越大效率越差),并且需要能够快速处理数十万行。
我写的列表理解是:
results = [row for row in big if row[8] in small]
列表列表的示例数据(大):
[[23.4, 6.8, 9.0, 13.0, 4.0, 19.0, 2.5, 7.6, 1472709600000],
[32.1, 15.5, 17.7, 21.7, 12.7, 27.7, 11.2, 16.3, 1472882400000],
[40.8, 24.2, 26.4, 30.4, 21.4, 36.4, 19.9, 25.0, 1473055200000],
[49.5, 32.9, 35.1, 39.1, 30.1, 45.1, 28.6, 33.7, 1473228000000],
[58.2, 41.6, 43.8, 47.8, 38.8, 53.8, 37.3, 42.4, 1473400800000]]
列表示例数据(小):
[1472709600000, 1473055200000]
期望的输出(结果):
[[23.4, 6.8, 9.0, 13.0, 4.0, 19.0, 2.5, 7.6, 1472709600000],
[40.8, 24.2, 26.4, 30.4, 21.4, 36.4, 19.9, 25.0, 1473055200000]]
是否有更有效的方法来返回在另一个列表中找到最后一个元素的每一行?
最佳答案
通过使用集合,您可以轻松地消除每次迭代中 small
的线性搜索:
smallset = set(small)
results = [row for row in big if row[8] in smallset]
关于python - 检查行(列表列表中)的最后一个元素是否在另一个列表中找到的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39737941/