Lambda 精确匹配

Lambda Exact Match

list1 = ['2.2.2.2', '5.5.5.5', '7.7.7.7', '11.11.11.11', '14.14.14.14']


list2 = ['1.1.1.1 cisco asa', '4.4.4.4 cisco 9k', '5.5.5.5 cisco nexus', '9.9.9.9 cisco 7k', '2.2.2.2 cisco 9500', '2.2.2.222 cisco 9300', '14.14.14.14 cisco 9200', '7.7.7.7 cisco 4121', '10.10.10.10 cisco 4100', '11.11.11.11 cisco asr', '100.100.100.100 cisco asr-x', '11.11.111.111 cisco asr-x-2']

########### lambda V3

打印“V3”

for tintin in list1:
print filter(lambda a: tintin in a, list2)

输出

V3

['2.2.2.2 cisco 9500', '2.2.2.222 cisco 9300']
['5.5.5.5 cisco nexus']
['7.7.7.7 cisco 4121']
['11.11.11.11 cisco asr']
['14.14.14.14 cisco 9200']

期望的输出

想找到完全匹配的...在第一个输出中给我 2.2.222 而不是单个 2.2.2.2。

我想匹配和比较list1和list2,匹配list1中的所有元素,只输出list2中的匹配项。但是,我想要完全匹配。它不仅匹配 2.2.2.2,而且还匹配 2.2.2.222“Dont want to 2.2.2.222”。 谢谢

所以,我想这就是您的要求。另外,我在这个片段中使用 Python 3 :

list1 = ['2.2.2.2', '5.5.5.5', '7.7.7.7', '11.11.11.11', '14.14.14.14']
list2 = ['1.1.1.1 cisco asa', '4.4.4.4 cisco 9k', '5.5.5.5 cisco nexus', '9.9.9.9 cisco 7k', '2.2.2.2 cisco 9500', '2.2.2.222 cisco 9300', '14.14.14.14 cisco 9200', '7.7.7.7 cisco 4121', '10.10.10.10 cisco 4100', '11.11.11.11 cisco asr', '100.100.100.100 cisco asr-x', '11.11.111.111 cisco asr-x-2']

for e in list1:
    r = next(filter(lambda a: e in a, list2))
    if r:
        print(r)
        break

输出:

user@MacBook-Air Tests % python3 test.py
2.2.2.2 cisco 9500
user@MacBook-Air Tests %

尝试修改lambda函数如下:

for tintin in list1:
    print(list(filter(lambda a: tintin in a.split(), list2)))

所以不是检查 tintin 是否是 a 的子列表,而是首先获取 a 中的所有单词(带有 a.split())然后搜索列表。

输出:

['2.2.2.2 cisco 9500']
['5.5.5.5 cisco nexus']
['7.7.7.7 cisco 4121']
['11.11.11.11 cisco asr']
['14.14.14.14 cisco 9200']