返回数组排序在字典顺序蟒蛇
问题描述:
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(..)
:
该算法将在为O(n×米+ N ×的log(n))与Ñ元件的数量在a1
,和米在a2
元素数运行。
如果您可以对ar2
进行预处理(并生成例如trie),则可以通过O(n)提高算法复杂度。但是,如果a1
中元素的数量与a2
中元素的数量相比是很大的,那么这是有益的。
+0
谢谢!现在它只通过了一项测试。我需要它不返回重复项(只返回1份)。我不熟悉lambda如何工作,但我正在阅读它。任何关于我如何去做这件事的建议? –
你想*排序*?或*过滤器*? –
我想排序并过滤 –