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

Imprimir "V3"

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

Salida

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']

Salida deseada

Me gustaría encontrar la coincidencia exacta... En la primera salida me da 2.2.222 en lugar del único 2.2.2.2.

Quiero hacer coincidir y comparar list1 con list2 y hacer coincidir todos los elementos en list1 y generar solo la coincidencia en list2. Sin embargo, quiero la coincidencia exacta. No solo coincide con 2.2.2.2 sino que también coincide con 2.2.2.222 "No quiero 2.2.2.222". Gracias

0
D' go 10 ene. 2022 a las 16:08
2
No entiendo, cual es tu pregunta, hay algun error?
 – 
Ghost Ops
10 ene. 2022 a las 16:10

2 respuestas

La mejor respuesta

Intente modificar la función lambda de la siguiente manera:

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

Entonces, en lugar de verificar si tintin es una sublista de a, primero obtiene todas las palabras en a (con a.split()) y luego busca en esa lista.

Salida:

['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']
0
Riccardo Bucco 10 ene. 2022 a las 16:15
1
Gracias Ricardo. ¡Esto funcionó!
 – 
D' go
10 ene. 2022 a las 16:24

Entonces, supongo que esto es lo que estás pidiendo. Además, estoy usando Python 3 para este fragmento:

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

Salida:

user@MacBook-Air Tests % python3 test.py
2.2.2.2 cisco 9500
user@MacBook-Air Tests %
0
Quatrecentquatre 10 ene. 2022 a las 16:13
Este enfoque falla con list2 = ['2.2.2.222 cisco 9300', '2.2.2.2 cisco 9500']
 – 
Riccardo Bucco
10 ene. 2022 a las 16:17
Bien, supongo que la respuesta anterior es un fragmento mejor entonces. no entendí bien.
 – 
Quatrecentquatre
10 ene. 2022 a las 16:21