【问题标题】:how to update a list and not have it remove previous input如何更新列表而不是让它删除以前的输入
【发布时间】:2019-12-28 09:00:44
【问题描述】:

我是编程新手,目前正在开发我的第一个程序。我正在尝试将字典添加到列表并让它存储它,每次我用新输入更新列表时,最后一个输入都会被删除。救命!!!

我感觉这与直接更新列表有关,而不是使用调解器。可能是?

def newfood(food, caloric):
    foodList = []
    newFoodList = ({food:caloric})
    foodList.append(newFoodList)
    print(foodList)

苹果:33,樱桃:34,Mlife:42

每次获得新输入时,它都应该更新列表以包含旧字典和新字典

【问题讨论】:

  • 将 foodList 设为全局变量。即在程序的主要范围内定义它
  • foodList移到你的函数之外。

标签: python list function


【解决方案1】:

foodList 列表在您的函数内部定义。因此,每次调用该函数时,它都会将值添加到空列表中。您需要将列表移到函数之外(def newfood(food, caloric): 上方)。然后您将能够从函数外部访问列表。

【讨论】:

  • 谢谢,这么简单的修复哈哈,这是否意味着我可以使用我创建的任何其他函数调用列表,因为它是外部的并且是“免费的”?
  • 你不需要“把它移到外面”,你也可以在函数的开头加上global foodList,或者在函数的末尾加上return foodList更好并将它分配给你调用函数的任何地方的某个变量。
  • @Grismar 给猫剥皮的方法有很多。取决于他想要做什么,返回值,全局设置,等等。我的主要观点是,他如何拥有它,他无法保存列表的状态,所以他必须像我之前所说的那样“将其移到函数之外”。
  • 我同意,但由于@anthonypizarro 似乎是该语言的新手,因此将他认为是“修复”的东西送走并没有真正的帮助,所以我想我会指出这一点。
【解决方案2】:

正如其他人所指出的,问题在于您正在修改一个在函数之外不可用的变量。

一种解决方案是声明 foodList global:

def newfood(food, caloric):
    global foodList
    foodList = []
    newFoodList = ({food:caloric})
    foodList.append(newFoodList)
    print(foodList)

newfood('apple', 100)

另一种方法是在函数外部声明 foodList,但这是一种冒险的做法:根据您编写代码的方式,您最终可能会“屏蔽”全局变量。

foodList = []
def newfood(food, caloric):
    newFoodList = ({food:caloric})
    foodList.append(newFoodList)
    print(foodList)

newfood('apple', 100)

最好的解决方案可能是让函数返回你所追求的,或者编写它以便修改给定的列表:

def newfood(foodList, afood, acaloric):
    return foodList + [{afood:acaloric}]

foodList = []
foodList = newfood(foodList, 'apple', 100)
print(foodList)

或者:

def newfood(afoodlist, afood, acaloric):
    foodList.append({afood:acaloric})

foodList = []
newfood(foodList, 'apple', 100)
print(foodList)

或者,考虑到你在做什么,把整个事情写成一个类:

class FoodList(list):
    def add(self, food, caloric):
        self.append({food:caloric})

foodList = FoodList()
foodList.add('apple', 100)
print(foodList)

注意:您将 newFoodList 创建为 ({food:caloric}) - 但是,这实际上只是一个 dict 字典,在这种情况下括号不会做任何事情。此处显示的替代方案也是如此,但您似乎并不真正在寻找字典列表,因此您可能应该重新考虑您的数据结构。

【讨论】:

  • 我试图存储一种食物及其每份的热量值,所以我认为字典是存储数据的好方法,后来我可以弹出某种食物的值并相乘为用户服务了 X 量。感谢您提供多种解决问题的方法,非常有帮助
猜你喜欢
  • 2018-02-03
  • 1970-01-01
  • 2023-03-17
  • 2020-08-06
  • 1970-01-01
  • 2015-08-01
  • 2012-02-04
  • 2017-03-08
  • 1970-01-01
相关资源
最近更新 更多