【问题标题】:Remove a Python array element by name按名称删除 Python 数组元素
【发布时间】:2016-10-07 18:14:08
【问题描述】:

在 Python 数组中,我需要知道(如果可能)如何通过数组元素的名称删除数组元素,而不知道数组中元素的索引。

所以,如果我定义了这个数组

usernames = ["Billy", "Bob", "Apple"]

然后我们将有三个数组元素。
比利鲍勃苹果
然后如果我有这个代码

# Deleting the element
def delete_username():
    to_delete = raw_input("Username to remove:")
    # (Code to delete by element name)

我需要知道如何通过名称删除数组中的元素。
例如,如果用户输入了“比利”,而程序不知道比利在数组中的索引,我们如何从数组中删除比利,只知道它的名字?

【问题讨论】:

    标签: python arrays sorting


    【解决方案1】:

    你也可以使用remove

    usernames = ["Billy", "Bob", "Apple"]
    if "Billy" in usernames:
        usernames.remove("Billy")
    # usernames = ["Bob", "Apple"]
    

    【讨论】:

    • 额外的布朗尼点显示当项目不在列表中时将出现的ValueError 的处理。
    • 实际上只是为了澄清一下,使用try:except ValueError: 是更好的风格,还是一样好?
    • 使用try except ValueError 在这里会很好用,因为这样您就可以控制在该项目实际上不存在于列表中的情况下要执行的操作。但是,您完全有可能希望应用程序在项目不存在的情况下引发并崩溃。就个人而言,我可能会捕获错误并提供用户友好的输出,但将回溯记录在日志文件中并退出。
    • 想到了什么。您可能希望在该方法中引发异常,但将其包装在 try 中,除非在该方法之外进行相应的处理。那可能是更好的方法。只是想我也会把它扔在那里
    【解决方案2】:

    您可以使用remove() 方法删除元素。在尝试删除它之前检查列表中是否存在所需的元素,因为如果元素不存在于列表中,则会引发ValueError

    if to_delete in usernames:
      usernames.remove(to_delete)
    

    【讨论】:

    • @AshishAhujaツ,我已经编辑了答案。我会记住这一点,谢谢:)
    • @cpburnz,谢谢。我已经删除了不必要的休息。
    • @SilentMonk 感谢您这样做。现在答案好多了。
    【解决方案3】:
    if to_delete in usernames:
        usernames.pop(usernames.index(to_delete))
    

    基本上就是这样。

    【讨论】:

    • 为什么不直接使用remove
    • 我认为 remove 也将索引作为参数@idjaw。猜我错了。无论如何,这行得通,不过 Greg 的方法更优雅。
    【解决方案4】:
    def remove_by_name(name):
        if name in usernames:
            usernames.remove(name)
    

    只删除第一次出现,如果你想要所有元素,修改上面的示例。

    【讨论】:

      猜你喜欢
      • 2015-03-02
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 2021-12-25
      • 2017-09-13
      相关资源
      最近更新 更多