Найти и заменить строковые значения в списке строк - функция «преобразования» - PullRequest
0 голосов
/ 02 ноября 2019

"Напишите функцию преобразования , которая в качестве параметра получает список строк, исходных и целевых фраз . В результате функции исходные и целевые фразы изменяютсяЕсли исходная фраза встречается несколько раз в заданном элементе списка, ее следует преобразовывать при каждом появлении. Кроме того, в элементах списка с четными индексами все заглавные буквы должны оставаться преобразованными в маленькие и маленькие в большие. функция возвращает количество выполненных преобразований и изменений, внесенных в ячейки списка."

Мой код:

def conversion(list, original, target):
    for i in list:
        if original in list[i]:
            list[i] = [word.replace(original, target) for word in list]
        #if (i+1)%2==0:

list1=['Alex and John', 'Alex and Adam and Alexander', 'Adam has a dog', 'YEllow car']
original1='Alex'
target1='Adam'

result=conversion(list1, original1, target1) 
print(result)

Результат должен быть следующим:

'Adam and John', 'aDAM AND aDAM AND aLEXANDER', 'Adam has a dog', 'yeLLOW CAR'
2

Я получаю эту ошибку:

Ошибка типа: индексы списка должны быть целыми или кусочками, а не str

Ответы [ 3 ]

1 голос
/ 04 ноября 2019

Пожалуйста, проверьте это решение. Здесь я заменяю только точное совпадение слова, то есть «Алекс», на «Адам». Итак, «Алекс» изменится на «Адам», но «Александр» не изменится на «Адамандер».

import re
def conversion(li, original, target):
    emp_str = []
    for index, each in enumerate(li):
        sub_str = re.sub(r'(?<![\w\d])%s(?![\w\d])' % original, target, each)
        final_str = sub_str.swapcase() if index % 2 != 0 else sub_str
        emp_str.append(final_str)
    return emp_str


list1=['Alex and John', 'Alex and Adam and Alexander', 'Adam has a dog', 'YEllow car']
original1='Alex'
target1='Adam'

result=conversion(list1, original1, target1)
print(result)

Мой вывод: [' Адам и Джон', ' АДАМ И АДАМ И АЛЕКСАНДР ',' У Адама есть собака ',' ЖЕЛТЫЙ АВТОМОБИЛЬ ']

Здесь АЛЕКСАНДР не изменится на АДАМАНДР потому что мы подбираем точное слово «Алекс».

0 голосов
/ 02 ноября 2019

у вас есть несколько ошибок здесь, во-первых, не рекомендуется использовать имя функции python для имени переменной, потому что вы перезаписываете оригинальный список функций.

Чтобы преобразовать все заглавные буквы в строчныеи все строчные и строчные буквы данной строки вы можете использовать функцию Swapcase () Python String

ваш код должен выглядеть следующим образом:

def conversion(list_, original, target):
    for i in range(len(list_)):
        if original in list_[i]:
            list_[i] = list_[i].replace(original,target)
            if i % 2 != 0:
                list_[i] = list_[i].swapcase()

list1=['Alex and John', 'Alex and Adam and Alexander', 'Adam has a dog', 'YEllow car']
original1='Alex'
target1='Adam'

conversion(list1, original1, target1)
print(list1)

вывод:

['Adam and John', 'aDAM AND aDAM AND aDAMANDER', 'Adam has a dog', 'YEllow car']
0 голосов
/ 02 ноября 2019

ваша функция должна быть изменена следующим образом,


    def conversion(list, original, target):
        for i in range(len(list)):
            if original in list[i]:
                list[i] = list[i].replace(original, target)

, тогда результат будет: list1: ['Адам и Иоанн', 'Адам и Адам и Адамандр', 'Адам имеет собаку','Желтая машина']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...