[英]return sorted array in lexicographical order python
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子字符串的排序元素?
您可以简单地使用一个filter
并检查a2
是否包含包含此类子字符串的any(..)
元素:
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))中运行 , 其中 a1
的元素数为n ,而a2
的元素数为m 。
如果可以在ar2
上进行预处理(并生成例如trie),则可以提高O(n)的算法复杂度。 但这仅在a1
中的元素数量a2
的元素数量的情况下才是有益的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.