Quiero verificar si algún elemento del sustantivo coincide con alguno de los elementos de las tablas.

Primer elemento en nous en "dispositivos". Claramente coincide con "projname: dataset.devices". Si se encuentra una coincidencia, el bucle debería romperse, de lo contrario debería comprobar si el segundo elemento del sustantivo, que es "hoy", coincide con cualquier elemento de las tablas.

    tables = ["projname:dataset.devices","projname:dataset.attempts"]

    noun = [devices,today]

Lo intenté con "sustantivo en tablas", obtuve un resultado vacío. ¿Hay algún otro método con el que pueda probar?

Gracias por adelantado !!

3
user3447653 13 ene. 2017 a las 22:59

5 respuestas

La mejor respuesta

Un simple uso de any(n in s for n in nouns for s in tables) sería suficiente para un cheque.

Si realmente desea el elemento correspondiente, puede escribir esta función rápida:

>>> def first_match(nouns, tables):
...     for n in nouns:
...         for t in tables:
...             if n in t:
...                 return t
...
>>> first_match(nouns,tables)
'projname:dataset.devices'
3
juanpa.arrivillaga 13 ene. 2017 a las 20:11

Por su comentario, supongo que los elementos en la lista no son cadenas, I no conozco ninguna forma de obtener el nombre var en Python, así que esta es mi solución

    tables = ["projname:dataset.devices","projname:dataset.attempts"]

noun = {"devices": devices, "today": today}

for n in noun:
    for table in tables:
        if n in table:
            break
0
Liron Lavi 13 ene. 2017 a las 20:22

Tenga en cuenta que en su código, cuando dice noun in tables significa que es una lista (sustantivo) DENTRO de otra lista (tablas). Eso no es lo que queremos descubrir, sino que desea encontrar cada sustantivo que exista dentro de uno de los elementos de las tablas. Intenta lo siguiente:

tables = ["projname:dataset.devices","projname:dataset.attempts"]

nouns = ["devices","today"]

for noun in nouns:
    for table in tables:
        if noun in table:
            print "Found", noun
            break
0
GantTheWanderer 13 ene. 2017 a las 21:36

¿Qué tal esta solución simple:

>>> tables = ["projname:dataset.devices","projname:dataset.attempts"]
>>> noun = ['devices','today']
>>> for x in noun:
        if any(x in s for s in tables):
            print('Found !')
            break


Found !
0
Iron Fist 13 ene. 2017 a las 20:23

Tarea:

  1. 'Compruebe si algún elemento del sustantivo coincide con alguno de los elementos de las tablas'
  2. 'Si alguna función devuelve verdadero, tengo que obtener el elemento correspondiente en las tablas'

Datos:

tables = ["projname:dataset.devices","projname:dataset.attempts"]
noun = ['devices','today']

Expresión del generador :

Esto solo da la primera coincidencia, según la solicitud de OP.

try:
    print(next(t for n in noun for t in tables if n in t))
except StopIteration:
    pass

Salida:

   'projname:dataset.devices'
1
ade1e 14 ene. 2017 a las 08:16