以字典顺序python返回排序数组

时间:2017-07-17 18:50:19

标签: python python-2.7 list filter

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的子串的已排序元素?

1 个答案:

答案 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中的元素数量相比较大,那么这只会很有用。