a1 = ['arp', 'bull', 'mice']
a2 = ["lively", "alive", "harp", "sharp", "armstrong"]
我需要它返回:
['arp']
我的代码是:
def in_array(array1, array2):
x = array1
return sorted(x)
适用于:
a1 = ["live", "arp", "strong"]
a2 = ["lively", "alive", "harp", "sharp", "armstrong"]
r = ['arp', 'live', 'strong']
如何对数组进行排序,只匹配作为a2的子串的已排序元素?
答案 0 :(得分:0)
您只需使用filter
并检查any(..)
中是否包含a2
个包含此子字符串的元素:
def in_array(a1,a2):
return filter(lambda e1: any(e1 in e2 for e2 in a2),a1)
如果您希望对结果进行排序,可以使用sorted(..)
:
def in_array(a1,a2):
return sorted(filter(lambda e1: any(e1 in e2 for e2 in a2),a1))
如果您想消除重复项,可以使用set(..)
:
def in_array(a1,a2):
return sorted(set(filter(lambda e1: any(e1 in e2 for e2 in a2),a1)))
该算法将在 O(n×m + n×log(n))中运行,其中 n a1
中的元素数量,并且< em> m a2
中的元素数量。
如果您可以对ar2
进行预处理(并生成例如trie),则可以使用 O(n)来提高算法复杂度。但是,如果a1
中的元素数量与a2
中的元素数量相比较大,那么这只会很有用。