【发布时间】:2017-02-05 20:51:47
【问题描述】:
我目前有一个大约 9 列和 5000 行的列表(我们将其命名为“大”),并且还在不断增长。我有另一个列表(我们将其命名为“小”),其中包含大约 3000 个元素。我的目标是返回 big[8] 可以在 small 中找到的每一行。结果将存储在列表列表中。
我使用了列表理解,它一直在返回正确的输出,但它对我的需求来说效率太低了。处理这 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]]
有没有更有效的方法来返回在另一个列表中找到其最后一个元素的每一行?
【问题讨论】:
-
试试这个代码:
results = [row for row in big if row[-1] in small]这将有助于动态长度列表。 -
@AjaySreeram 您的回答与内存和时间方面的任何效率无关。
标签: python performance list