python - 检查行(列表列表中)的最后一个元素是否在另一个列表中找到的有效方法?

标签 python performance list

我目前有一个列表列表(让我们将其命名为“大”),大约有 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/

相关文章:

android - 绘制分配 : Memory allocations within drawing code

android - 使用包含大量数据的 RecyclerViews 优化 ViewPager

java - ZipOutputStream 到网络

python - 将列表列表转换为字典列表

python - 我们每次用Python写入excel文件时都必须打开它吗?

python - 用于捕获韩文字母的正则表达式

python - 在 Python 中对 CSV 进行排序

c++ - 更新元素 STL 列表列表

java - 当 List 实现的对象将其自己的对象存储为列表中的元素时,为什么 hashCode 和 equals 方法不起作用

python - 树莓派2使用后如何释放 channel ?