【发布时间】:2015-02-06 14:20:26
【问题描述】:
假设我有两个大列表,包含 A 类对象的 list_of_A_objects 和包含 B 类对象的列表 _of_B_objects。
他们都有字符串成员。
我希望能够搜索两个列表中的所有元素,如果 A 对象的字符串成员是 B 对象的字符串成员的子字符串,我希望它做一些事情。
如果列表很小,我下面的内容很好,但如果列表很大,则可能需要很长时间。
有没有办法让它更快。我一直在考虑以某种方式使用字典,因为它们的查找速度很快,但我无法弄清楚。
这是我目前所拥有的。
class A:
def __init__(self, x):
self.string = x
class B:
def __init__(self,x):
self.string = x
list_of_A_objects = get_large_list_of_A_objects()
list_of_B_objects = get_large_list_of_B_objects()
for A_object in list_of_A_objects:
for B_Object in list_of_B_objects:
if A_object.string in B_Object.string:
do_something()
【问题讨论】:
-
做某事所需的时间并不是我所关心的。上面的代码是我的问题的简化示例。在我的真正问题中,随着一个列表变大,另一个列表也变大了,所以随着其中一个列表的大小增加,我会遇到 n^2 时间顺序的事情。
-
我问因为找到第一个匹配项和做某事或寻找多个匹配项之间有很大的区别,我不认为 set 或 dict 可以帮助你寻找子字符串
-
好的,我明白你的意思了。它需要搜索多个匹配项。谢谢
-
对字符串有什么限制吗?如果它们是一般字符串,那么似乎很难比二次复杂度做得更好,但如果它们是特殊的,可能会有一些技巧。
标签: python performance algorithm search computer-science