Замена нескольких строк в списке одним оператором - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь заменить третье и четвертое слова этого списка двумя разными словами в одном утверждении, и просто не могу понять, что делать то, что я пробовал, не работает с ошибкой AttributeError: 'list' object has no attribute 'replace':

friends = ["Lola", "Loic", "Rene", "Will", "Seb"]
friends.replace("Rene", "Jack").replace("Will", "Morris")

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Другой способ, если вы не возражаете против затрат на преобразование списка в pandas.Series:

import pandas as pd

friends = ["Lola", "Loic", "Rene", "Will", "Seb"]

friends = pd.Series(friends).replace(to_replace={"Rene":"Jack", "Will":"Morris"}).tolist()
print(friends)
#['Lola', 'Loic', 'Jack', 'Morris', 'Seb']
0 голосов
/ 01 марта 2019

Это не очень симпатичное решение, но, тем не менее, с одной строкой:

friends = list(map(lambda x: x if x != "Will" else "Morris", map(lambda x: x if x != "Rene" else "Jack", friends)))

Краткое объяснение:

Это "карта" (лямбда, список) "решение, чей выходной список передается в качестве входного списка в другое внешнее решение" map (lambda, list) ".

lambda во внутреннем map предназначено для замены "Will" на "Morris".

lambda во внешнем map предназначен для замены "Rene" на "Jack"

0 голосов
/ 01 марта 2019

Если вы хотите сделать несколько замен, вероятно, самый простой способ - создать словарь того, что вы хотите заменить чем:

replacements = {"Rene": "Jack", "Will": "Morris"}

, а затем использовать понимание списка:

friends = [replacements[friend] if friend in replacements else friend for friend in friends]

Или более компактно, используя dict.get() со значением по умолчанию.

friends = [replacements.get(friend, friend) for friend in friends]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...