gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:50:49 26 4
gpt4 key购买 nike

假设我有两个人员列表,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/

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