遍历子字符串以查找特殊字符并删除字符

时间:2019-11-06 06:33:33

标签: python-3.x

我正在尝试编写一个函数,该函数接受包含字符串的input_list并根据这些条件返回包含字符串的output_list。对于input_list中的每个字符串: 1.如果字符串中包含“ $”,则从字符串中删除出现在“ $”之后的所有字符,例如“ amazeing23 $ ing23”应变为“ amaze”。
2.将结果字符串添加到output_list中,例如“ amaze” 3.如果该字符串不包含“ $”,则将一个字符串添加到output_list中,然后添加其长度,例如“ world5”

def my_list(input_list):     output_list = []     #遍历列表中的字符串     对于input_list中的项目:         item = item.split()         打印(项目)

    # Iterate through each character to check for $ sign.
    for char in item:
        if '-' in char:
            char = item.split() 
            char = item.remove(item[0]+1)
            output_list.append(item)
            #print(output_list)

        if '-' != char:
            char = char + str(len(char))
            output_list.append(char)
return output_list

input_list = [“ amazieng23 $ ing23”,“世界”,“ wuond3erful $ u3”] 结果=我的清单(输入清单) 打印(结果)

这是示例输入: input_list = [“ amazieng23 $ ing23”,“世界”,“ wuond3erful $ u3”] 预期产量: output_list = [“ amaze”,“ world5”,“很棒”] 我可以拆分具有$的列表,但不能删除$符号后的字符。当我尝试在第三步的字符串之后添加字符串的长度时,我也遇到错误“ TypeError:无法将'int'对象隐式转换为str”。

2 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,那么这应该是您要寻找的东西:

def my_list(input_list):
    output_list = []
    for item in input_list:
        split_string = item.split('$')
        if len(split_string) > 1:
            pre_string = split_string[0]
            for char in '$'.join(split_string[1:]):
                pre_string = pre_string.replace(char,'')
            output_list.append(pre_string)
        else:
            output_list.append(split_string[0] + str(len(split_string[0])))
    return output_list

input_list=["amazieng23$ing23","world", "wuond3erful$u3"]

output = my_list(input_list)

for i in output:
    print(i)

具有以下输出:

amaze
world5
wonderfl

请注意,缺少u的妙用是因为它无法检查它是否是真实单词,并且您已经想删除u

NB:删除第一个$后需要整个字符串。例如。 Anacbborndla$r$b$rl将返回Anaconda

答案 1 :(得分:1)

Python字符串是不可变的。您不应该像尝试那样更改字符串的某些索引值。您可以做得更好。

这个想法是,您一个一个地迭代输入列表,尝试使用string.find("$")在字符串中查找“ $”,该函数将返回存在“ $”的索引,或者返回-1字符串中不存在“ $”。基于此检查,您需要对字符串进行必要的操作,然后将该字符串添加到output_list中。

def do_string_manipulation(input_list):
    output_list = []
    for element in input_list:
        index = element.find("$")

        # do condition manipulation here
        if index != -1:
            element = element[:index]
        else:
            element = element + "".join(map(str, range(1, len(element)+1)))

        output_list.append(element)
    return output_list

print(do_string_manipulation(["amaze$123", "amaze"]))

这导致

['amaze', 'amaze12345']

一个讨厌的班轮代码可以做到这一点

output_list = [element[:element.find("$")] if (element.find("$") != -1) else element+"".join(map(str, range(1, len(element)+1))) for element in input_list]