Python:基于input()从列表中删除项目?

时间:2020-02-26 09:27:23

标签: python list

对于我的一项作业,如果我们可以添加教授尚未在作业说明中告诉我们的新功能,则可以提供额外的学分。这是一个密码保护程序,我正在使用caeser密码将网站/密码保存到列表中。我正在尝试创建基于用户特定输入的密码删除功能。

例如,这是一个随机模板列表:

passwords = [["facebook", "gGjjI%%%66"], ["youtube", "coYtF###12$"]]

比方说,我想删除youtube密码列表中的密码。我已经做过一些研究,看来remove()对于我想做的事情可能是一个不错的选择,但是我在将其付诸实践时遇到了问题。

if choice == '6':
    input("Enter the password you want to delete: ")
    for keyvalue in passwords:
        print(keyvalue[0])
    deletePassword = input()

    for i in range(len(passwords)):
        if deletePassword in passwords[i][0]:
            passwords.remove(deletePassword)

这里的问题是,在我输入要删除其密码的网站名称(例如youtube)后,按Enter键后,它会重新打印仍包含我要删除的内容的列表,如果我再按一次Enter键,它将抛出: ValueError:list.remove(x):x不在列表中

关于如何解决此问题的任何建议,或者在正确的方向上为我提供一种更好的方法的建议?

3 个答案:

答案 0 :(得分:2)

替换:

input("Enter the password you want to delete: ")

使用

print("Enter the password you want to delete: ")

(您有两个input,只需删除第一个的值)

答案 1 :(得分:1)

您可以尝试以下方法:

deletePassword = input("Enter the password you want to delete: ")
passwords = [password for password in passwords if password[0] != deletePassword]

答案 2 :(得分:0)

我建议您将密码存储为字典,而不是列表列表。这样一来,您就可以按名称而不是数字索引来查找/访问网站(每次对列表进行修改都会对其进行更改)。

passwords = [["facebook", "gGjjI%%%66"], ["youtube", "coYtF###12$"]]
passwords = dict(passwords)
# passwords is now {'facebook': 'gGjjI%%%66', 'youtube': 'coYtF###12$'}


if choice == '6':
    print("Enter the site name of the password you want to delete: ")
    for site in passwords:
        print(' ', site)
    deletePassword = input('>')

    if deletePassword in passwords:
        passwords.pop(deletePassword)
相关问题