una separar por online eliminar contar comparar caracteres caracter cadenas cadena python string python-3.x indexing position

separar - ¿Cómo encuentro la posición de MÁS DE UNA subcadena en una cadena(shell de Python 3.4.3)?



python online (3)

El siguiente código muestra la posición de "palabra" si aparece una vez en la cadena. ¿Cómo puedo cambiar mi código para que si la "palabra" aparece más de una vez en la cadena, imprima todas las posiciones?

string = input("Please input a sentence: ") word = input("Please input a word: ") string.lower() word.lower() list1 = string.split('' '') position = list1.index(word) location = (position+1) print("You''re word, {0}, is in position {1}".format (word, location))


Otra solución que no se divide en espacio.

def multipos(string, pattern): res = [] count = 0 while True: pos = string.find(pattern) if pos == -1: break else: res += [pos+count] count += pos+1 string = string[pos+1:] return res test = "aaaa 123 bbbb 123 cccc 123" res = multipos("aaaa 123 bbbb 123 cccc 123", "123") print res for a in res: print test[a:a+3]

Y la salida del script:

% python multipos.py [5, 14, 23] 123 123 123


Use enumerate :

[i for i, w in enumerate(s.split()) if w == ''test'']

Ejemplo:

s = ''test test something something test''

Salida:

[0, 1, 4]

Pero supongo que no es lo que estás buscando, si necesitas iniciar índices de palabras en una cadena, te recomendaría usar re.finditer :

import re [w.start() for w in re.finditer(''test'', s)]

Y la salida para el mismo s sería:

[0, 5, 30]


sentence = input("Please input a sentence: ") word = input("Please input a word: ") sentence = sentence.lower() word = word.lower() wordlist = sentence.split('' '') print ("Your word ''%s'' is in these positions:" % word) for position,w in enumerate(wordlist): if w == word: print("%d" % position + 1)