Tengo una lista de subcadenas y estoy comprobando si alguna de las subcadenas se encuentra en otra cadena. cualquiera devuelve boolean.

>>> list=['oh' , 'mn' , 'nz' , 'ne']
>>> name='hstntxne'
>>> any(x in name for x in list)
True
>>> name='hstnzne'
>>> any(x in name for x in list)
True

Quiero devolver el índice. por ejemplo, la primera vez debe ser 3 y la segunda debe ser 2 y 3.

0
Bharat Sharma 21 sep. 2017 a las 13:17

2 respuestas

La mejor respuesta

En primer lugar, no llame a su lista list. list es una estructura de datos de Python y no desea anular ese nombre a menos que tenga una razón específica para hacerlo.

Puede lograr esto fácilmente con una lista de comprensión en una línea.

substrings = ['oh' , 'mn' , 'nz' , 'ne']
name1='hstntxne'
name2='hstnzne'

[substrings.index(x) for x in substrings if x in name1]

Esto devuelve 3

[substrings.index(x) for x in substrings if x in name2]

Esto devuelve [2, 3]

Para que esto funcione con cualquier lista de subcadenas y nombres, póngalo en una función:

def getIndex(subs, name):
    return [subs.index(x) for x in subs if x in name]

getIndex(substrings, name2) #example call
0
Woody Pride 21 sep. 2017 a las 12:17
import re

# Try and use regex to see if subpattern exists

l = ['oh', 'mn', 'nz', 'ne']

name='hstnzne'
match_indx = []

for i, sub_str in enumerate(l):
    result = re.split(sub_str, name)
    if (len(result)>1):
        # We could split our string due to match, so add index of substring
        match_indx.append(i)

print(match_indx)
0
Anjali 21 sep. 2017 a las 12:29