首页 > 解决方案 > 遍历子字符串以查找特殊字符并删除字符

问题描述

我正在尝试编写一个函数,该函数接受包含字符串的 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 = [] #遍历列表中的字符串 for item in input_list: item = item.split() print(item)

    # 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","world", "wuond3erful$u3"] 结果=my_list(input_list) print(result)

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

标签: python-3.x

解决方案


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

这个想法是你逐个迭代你的 input_list,尝试在你的字符串中找到“$” 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]

推荐阅读