Python - Изменение чувствительности к регистру заданных c слов в списке - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть следующие списки:

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

mylist2 = ["Foo", "Bar"]

Я хочу заменить слова в mylist, которые существуют в mylist2, но в верхнем регистре. мой желаемый вывод будет выглядеть так:

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

Я попробовал следующее. Однако в моем списке изменений не было.

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

Ответы [ 3 ]

2 голосов
/ 26 февраля 2020

В синтаксисе Python for item in somelist значение item по существу установлено на копию каждого элемента в списке на каждой итерации, а не на ссылку на элемент в списке.

Вам также не нужен внутренний l oop, поскольку Python условие in может быть использовано для проверки членства в списке.

А также обратите внимание, что оно выглядит как вы хотите, чтобы замененные элементы были написаны заглавными буквами, а не заглавными буквами.

Я думаю, что относительно Pythoni c способ выполнить sh, что вы хотите:

for i, word in enumerate(mylist):
  if word.capitalize() in mylist2:
    mylist[i] = word.capitalize()
1 голос
/ 26 февраля 2020

Это, кажется, работает нормально:

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))
1 голос
/ 26 февраля 2020

Попробуйте это

for index,word in enumerate(mylist):
    for word2 in mylist2:
        if word == word2.upper():
            mylist[index] = word2

Вывод print (mylist)

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