python - 如何根据任意标准对齐两个列表?

标签 python

假设我有两个人员列表,persons_apersons_b。我想尝试根据任意属性(例如 person.age)将列表 persons_a 中的每个人与 persons_b 中的一个人相匹配, person.town_from 左右。

我怎样才能以最有效的方式在 Python 中做到这一点? 我只做一个 for 循环吗?

criteria = lambda a, b: a.age == b.age

result = []
for a in persons_a:
    for b in persons_b:
        if critera(a, b):
           result.add(a)

最佳答案

criteria = lambda a, b: a.age == b.age
cross = itertools.product( persons_a, persons_b )
result = ( a for a, b in cross if criteria( a, b ) )

这更像 Pythonic,也更容易阅读。 itertools 只是一种执行相同嵌套 for 循环的方法,因此它并没有提高效率,只是更易于阅读代码。

由于您必须遍历每个组合,您将无法获得比 O( n^2 ) 更好的组合,因此除非您可以将循环短路或出现通过一次贪婪算法的两个列表,然后上面和你的是最佳解决方案。如果您有半结构化数据,比如等长列表也被排序,那么您可以通过一次遍历列表来加快代码速度,但如果您没有任何像这样的结构,那么你将不得不坚持使用你的 O( n^2 ) 算法。

关于python - 如何根据任意标准对齐两个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13456997/

相关文章:

python - 我应该对 Python 中的错误/非法参数组合提出哪个异常?

python - 如何从 .ipynb (Jupyter Notebook) 制作可执行的 Python 文件?

python - 在 Python 中读取 .tar.gz 文件

python - index 1/2nd 列表项被无缘无故地跳过

python - wxpython 应用程序中严重的内存泄漏

python - 无法在 Python 3.10 上安装 numba

python - 基于另一列拆分 pandas DataFrame 列的最短方法

python - 加速scipy自定义连续随机变量

python - Python OpenCV-过滤掉不在附近的轮廓

Python 最佳实践 : pass globally known variable explicitly to a function or not?