Tengo elementos en una lista predefinida y una cadena de consulta. Me gustaría verificar si query_str tiene algún valor en la lista predefinida y, de ser así, agregarlos a una nueva lista como elementos separados.

predefined_lst = ['hello', 'goodbye', 'see you later']

query_str  = 'hello | are you having a nice day?  see you later |'

new_lst = []

Tengo la sintaxis para comparar la cadena con los valores de la lista, pero no puedo obtener los valores que aparecen en la cadena para agregarlos a la nueva lista como elementos individuales en la lista. En el ejemplo anterior, new_lst debería ser new_lst = ['hello', 'see you later'].

Lo que tengo ahora solo da como resultado True cuando imprimo new_lst.

predefined_lst = ['hello', 'goodbye', 'see you later']
query_str  = 'hello | are you having a nice day?  see you later |'
new_lst = []
match = if any(string in query_str for string in predefined_lst)
new_lst.append(match)
print(new_lst)
2
DBS 14 ene. 2017 a las 04:52

6 respuestas

La mejor respuesta

Actualmente está agregando un valor True o False a new_lst en su línea,

match = if any(string in query_str for string in predefined_lst)

Esto se debe a que if ... devuelve el booleano True o False.

En cambio, intente esto

for x in predefined_list:
    if x in query_str:
        new_list.append(x)

O como una lista de comp,

new_lst = [string for string in predefined_lst if string in query_str]
2
Jason 14 ene. 2017 a las 02:10

Puede usar re.split para analizar varios delimitadores:

[i.strip() for i in re.split(r'[?|]',query_str) if i.strip() in predefined_lst]

O:

[i for i in re.split(r'(\s+)?[?|](\s+)?',query_str) if i in predefined_lst]
0
Vorsprung durch Technik 14 ene. 2017 a las 02:05

Otra forma, usando filter:

>>> predefined_lst = ['hello', 'goodbye', 'see you later']
>>> query_str  = 'hello | are you having a nice day?  see you later |'
>>> 
>>> list(filter(lambda s: s in query_str, predefined_lst))
['hello', 'see you later']
1
Iron Fist 14 ene. 2017 a las 03:43

Esta es una solución simple:

predefined_lst = ['hello', 'goodbye', 'see you later']
query_str  = 'hello | are you having a nice day?  see you later |'
new_lst = []
for item in predefined_lst:
    if item in query_str:
        new_lst.append(item)
print(new_lst)
0
xzoert 14 ene. 2017 a las 01:59

Anexa el resultado de la comparación a new_list. Lo que debe agregar es la cadena en sí.

predefined_lst = ['hello', 'goodbye', 'see you later']
query_str  = 'hello | are you having a nice day?  see you later |'
new_lst = []
for str in predefined_lst: 
    if(str in query_str):
        new_lst.append(str)
print new_lst
0
Sarah 14 ene. 2017 a las 02:05

Te has perdido en la lista de comprensión:

new_lst = [string for string in predefined_lst if string in query_str]
6
DYZ 14 ene. 2017 a las 04:42