2010-09-21 5 views
0

J'ai une affectation dit que pour créer une fonction findString qui accepte 2 chaînes qui sont 'target' et 'query', et qui retourne une liste de tous les index dans la cible où la requête apparaît. Si la cible ne contient pas de requête, renvoyez une liste vide.findString programme python

Par exemple: findString ('attaggtttattgg', 'gg')

retour:

[4,12]

Je ne sais pas comment commencer avec cette écriture de fonction du tout . Aidez-moi s'il vous plaît à tous. Merci beaucoup!!!

+0

devoirs? Il y a un tag de devoirs, FYI. – dheerosaur

+0

J'ai ajouté la balise "devoirs". Si ce n'est pas le cas, supprimez-le. –

Répondre

0

def find_string (recherche, aiguille): start = -1 résultats = []

while start + 1< len(search): 
    start = search.find(needle, start +1) 

    if start == -1: 
     break 

    results.append(start) 

return results 
+0

Il est à noter que la méthode find est obsolète dans la version 3.0. –

+0

merci beaucoup mais comme nous avons entré la recherche et l'aiguille dans cela(), cela signifie-t-il que cette fonction accepte deux arguments? Désolé de poser cette question mais je suis totalement novice en python et en programmation. Merci beaucoup. – pmt0512

0

Voici quelques conseils pour vous aider à démarrer.

  1. target.find(query) retournera l'indice de query dans la cible. Si query est introuvable, il renverra -1.

  2. Une chaîne peut être tranchée. target[pos:] vous donnera une sous-chaîne de la cible à partir de pos.

0

Cela peut nécessiter une gestion des erreurs:

def find_allPatterns(strVal, strSub): 
    listPos = [] 
    strTemp = strVal 

    while True: 
     try: 
      posInStr = strTemp.index(strSub) 
     except ValueError: 
      posInStr = None 
     if posInStr: 
      listPos.append(posInStr) 
      subpos = posInStr + len(strSub) 
      strTemp = strTemp[subpos:] 
     else: 
      break 

    return listPos 

print find_allPatterns('attaggtttattgg', 'gg') 

Sortie:

[4, 6] 
1

depuis une réponse a déjà été donnée:

def find_matches(strng, substrng): 
    substrg_len = len(substr) 
    return [i for i in range(len(strg) + 1 - substrg_len) 
      if strg[i:i+substrg_len] == substrg] 
+0

wow, c'est très agréable et simple. Merci beaucoup – pmt0512

+0

def find_matches (strg, substr): substrg_len = len (substr) return [i pour i dans la plage (len (strg) +1 - substrg_len) si strg [i: i + substrg_len] == substr] – armonge

+0

Annyway c'est je pense une meilleure solution que le mien :) – armonge

Questions connexes