Code python list

Bonjour à tous,

voici un code
def update_dic(message, date, user):
    '''
    P
    '''
    # Message pre processing 
    message = message.replace("\"","")
    message = message.replace("!","")

    for pattern in patterns_to_delete:
        message = message.replace(pattern,"")
    
    print("message", message)
    # split by word
    words = message.split()
    print("words before", words)
    print("so", 'so' in words_to_delete)
    
    for word in words:
        print("word", word)
        print("******************************************")
        if word in words_to_delete :
            words.remove(word) 
    print("words", words)


J'applique la fonction à
texto  =  "Yeah so maybe before"
update_dic(texto, "date", "user")

et voici le résultat
message Yeah so maybe before
words before ['Yeah', 'so', 'maybe', 'before']
so True
word Yeah
******************************************
word maybe
******************************************
words ['so', 'before']

C'est drôle, quand je fais
for word in words:
print(word)
il affiche so mais quand c'est dans la fonction, il le prend pas en compte, c'est très bizarre.

Réponses

  • Bonjour mcd.
    Et avec un exemple minimal compréhensible, qu'est-ce que cela donne ?

  • mcd écrivait :
         for word in [b]words[/b]:
             print("word", word)
            
             print("******************************************" )
             if word in words_to_delete :
                 [b]words[/b].remove(word)  
    
    Bonjour, je ne connais pas bien python mais il me semble qu'on ne peut pas modifier la liste sur laquelle on est en train de boucler (ou que le résultat n'est pas toujours celui attendu).

    il y a des discussions sur ce sujet par là : python1 python2
    Les pros de python du forum confirmeront (ou pas).
  • Bonjour,

    > il me semble qu'on ne peut pas modifier la liste sur laquelle on est en train de boucler

    C'est effectivement une très mauvaise idée, quel que soit le langage.

    Cordialement,

    Rescassol
  • Non, ça passe :
    >>> l=[1,2,3,4]
    >>> for i in l:
    ...   if i==2:
    ...     del l[-1]
    ...   print(i,l)
    ... 
    1 [1, 2, 3, 4]
    2 [1, 2, 3]
    3 [1, 2, 3]
    
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Nicolas

    ok mais alors qu'est-ce qui ne va pas dans le code de mcd ?
  • Bonjour,

    Ça peut passer, mais c'est aléatoire en général.
    Ça s'appelle scier la branche sur laquelle on est assis, on ne tombe pas à tous les coups, mais c'est risqué.

    Cordialement,

    Rescassol
  • C’est quoi, patterns_to_delete ?
    Et words_to_delete ?
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Bonjour à tous merci pour vos retours.

    Je comprends mieux le problème.

    C’est quoi, patterns_to_delete ? C'est une liste de pattern que j'aimerais supprimer par exemple "\"
    Et words_to_delete ? c'est une liste de mots que j'aimerais supprimer par exemple "will"
Connectez-vous ou Inscrivez-vous pour répondre.