代码之家  ›  专栏  ›  技术社区  ›  Sophus

Python:如何在函数中更新列表?

  •  1
  • Sophus  · 技术社区  · 6 年前

    在下面的可执行程序中,我创建了一个列表。还有一个删除特定元组的函数。当我运行这个程序时,系统会提示用户输入一个elelment。然后你看我给 remove_tuple_from_list() -函数的作用是创建一次的列表和要删除的元素。现在我遇到了一个问题:调用函数后的print向我显示列表中的相同元素。我以为一旦我提交了 list_tuple 从列表中删除元组() -函数和相应的元素已从列表中删除,即已更新创建的列表。

    我的想法是,我给一个现有的列表到一个函数,编辑它,然后更新现有的列表。

    list_tuple = [("100", 'AAA'), ("80", 'BBB'), ("20", 'CCC'), ("40", 'DDD')]
    
    def remove_tuple_from_list(list_tuple,
                               delete_element,
                               index = 0):
    
        list_tuple = [element for element in list_tuple if not element[index] == delete_element]
    
    if __name__ == "__main__":
    
        print "Before: list_tuple", list_tuple
        print ""
        delete_element = raw_input('Enter Element to be deleted: ')
    
        remove_tuple_from_list(list_tuple = list_tuple, delete_element = delete_element)
    
        print "After: list_tuple", list_tuple
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   blhsing    6 年前

    raw_input() 返回字符串,而不是元组。你应该用 input() 而是使您的输入可以作为元组进行计算。你的 remove_tuple_from_list() 也不做任何删除 delete_element list_tuple 因为这是比较 element[index] 删除元素 只是比较一下 element 删除元素 . 同时,它还为 列表 所以打电话的人 列表 永远不会更新。你应该更新 列表 用slice操作符代替:

    list_tuple = [("100", 'AAA'), ("80", 'BBB'), ("20", 'CCC'), ("40", 'DDD')]
    
    def remove_tuple_from_list(list_tuple,
                               delete_element):
        list_tuple[:] = [element for element in list_tuple if not element == delete_element]
    
    if __name__ == "__main__":
    
        print "Before: list_tuple", list_tuple
        print ""
        delete_element = input('Enter Element to be deleted: ')
    
        remove_tuple_from_list(list_tuple = list_tuple, delete_element = delete_element)
    
        print "After: list_tuple", list_tuple
    

    输入 ("100", 'AAA') ,以上输出:

    After: list_tuple [('80', 'BBB'), ('20', 'CCC'), ('40', 'DDD')]