用其他列表中的元素(单词)替换列表中的元素(单词)

时间:2019-02-20 11:11:39

标签: python list replace typeerror

我的代码中不断收到此错误消息,但我不明白为什么。

错误:

请提供消息:该死的男孩

Traceback (most recent call last):
  File "bleep.py", line 40, in <module>
    main()
  File "bleep.py", line 26, in main
    user_list_lower[item] = beep[0]
TypeError: list indices must be integers or slices, not str

代码:

#x.strip() for x in 
import sys

def main():

    if len(sys.argv) < 2:
        sys.exit("Must enter text. status code 1")

    with open(sys.argv[1], 'r') as f:
        content = f.read()

    content_list = content.split("\n") 

    user_input = input("Please provide a message: ")

    user_list = user_input.split()

    while '' in content_list:
        content_list.remove('')

    user_list_lower = [x.lower() for x in user_list] 

    for item in user_list_lower:
        if item in content_list:
            beep = [len(item) * '*']
            user_list_lower[item] = beep[0]
            print (user_list_lower)
            print(beep)
        else:
            break


    print(content_list)
    print(user_list_lower)

    return content


if __name__== "__main__":
    main()

作为用户输入,我使用:天哪!它并不会像应有的那样将darn更改为****。

在命令行参数中,我给出了一个文本文件,该文件包含很少的脏话,其中“织补”是一个。我的代码可以工作,但不会将darn字样更改为“ ****”

1 个答案:

答案 0 :(得分:0)

在循环中,您尝试使用item来索引user_list_lower,但是item是列表元素,而不是其索引。尝试使用enumerate

for idx, item in enumerate(user_list_lower):
    if item in content_list:
        beep = [len(item) * '*']
        user_list_lower[idx] = beep[0]
        print (user_list_lower)
        print(beep)
    else:
        break

除此之外,请考虑将content_list改成set,这将使检查if item in content_list的速度更快。