0
votes

Python - Modification de la sensibilité à la casse de mots spécifiques dans une liste

J'ai les listes suivantes:

for word in mylist:
    for word2 in mylist2:
        if word == word2.upper():
            word.replace(word, word2)

Je veux remplacer les mots de mylist qui existent dans mylist2, mais en majuscules. ma sortie souhaitée ressemblerait à:

mylist = ["Foo", "Bar", "NOTFOO", "NOTBAR"]

J'ai essayé ce qui suit. Cependant, il n'y a pas eu de changement dans ma liste.

mylist = ["FOO", "BAR", "NOTFOO", "NOTBAR"]

mylist2 = ["Foo", "Bar"]


1 commentaires

Les éléments de mylist sont-ils garantis d'être déjà capitalisés? (Vous avez écrit en majuscules, mais je pense que cela voulait dire en fait une majuscule.)


3 Réponses :


2
votes

Dans la syntaxe for item in somelist de Python, item est essentiellement défini sur une copie de chaque élément de la liste à chaque itération, plutôt qu'une référence à un élément de la liste.

Vous n'avez pas non plus vraiment besoin de la boucle interne, car la condition in de Python peut être utilisée pour vérifier l'appartenance à la liste.

Et notez également qu'il semble que vous vouliez le éléments remplacés en majuscules, pas entièrement en majuscules.

Je pense qu'une manière relativement pythonique d'accomplir ce que vous voulez est:

for i, word in enumerate(mylist):
  if word.capitalize() in mylist2:
    mylist[i] = word.capitalize()


0 commentaires

1
votes

Essayez ceci

['Foo', 'Bar', 'NOTFOO', 'NOTBAR']


0 commentaires

1
votes

Cela semble fonctionner correctement:

mylist = ["FOO", "BAR", "NOTFOO", "NOTBAR"]
mylist2 = ["Foo", "Bar"]


for x in range(0, len(mylist)): 

    for word2 in mylist2:
        if mylist[x] == word2.upper():
            mylist[x] = word2

print(str(mylist))


0 commentaires