在字符串列表中查找和替换字符串值-“转换”功能

时间:2019-11-02 12:07:48

标签: python string function replace

“编写转换功能,该功能作为参数接收字符串,原始短语和目标短语的列表。作为该功能的结果,原始短语到目标短语如果原始短语在列表的给定元素中出现多次,则应在每次出现时都将其转换。 此外,在具有偶数索引的列表的元素中,所有大写字母都应保留 转化为小,小转化为大。 该函数返回所做的转换次数和对列表单元格所做的更改应保存。

我的代码:

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

我收到此错误:

  

TypeError:列表索引必须是整数或切片,而不是str

3 个答案:

答案 0 :(得分:1)

请检查此解决方案。 在这里,我仅将单词“ Alex”的完全匹配替换为“ Adam”。因此,“ Alex”将更改为“ Adamander”,但“ Alexander”将不会更改为“ Adamander”。

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)

我的输出是:[' Adam and John',' aDAM AND aDAM AND aLEXANDER','Adam has a dog','yeLLOW CAR']

在这里, aLEXANDER 不会更改为 aDAMANDER ,因为我们匹配的是确切的单词“ Alex”。

答案 1 :(得分:0)

您的功能必须进行以下更改,


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

那么结果将是: 清单1: [“亚当和约翰”,“亚当和亚当和亚当ander”,“亚当有狗”,“黄车”]

答案 2 :(得分:0)

您在这里有几个错误,首先,因为要覆盖原始函数列表,所以将python函数的名称用作变量的名称不是一个好习惯。

要将给定字符串的所有大写字符转换为小写,将所有小写字符转换为大写,可以使用Python String swapcase()函数

您的代码应类似于:

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']