首页 > 解决方案 > 过滤列表而不创建新列表?

问题描述

所以我正在做一个项目,我有一个对象列表。我想根据对象属性过滤列表,但由于此列表在我的代码中的许多其他地方使用,我无法创建新列表,因为它会在我的代码中的其他地方产生问题。

我试过用这个:

individuals = list(filter(lambda x: x.waterstore > 0, individuals))

但它给了我“UnboundLocalError:分配前引用的局部变量'个人'”。

这是发生问题的代码。

def day(numberOfDays):
   days = 0
   while days < numberOfDays:
       print(str(days) + " days")
       child = randint(1,100)
       if child > 95:
           IndividualGenerator(randint(1,2))
       SeekWaterHole(individuals, lakes)
       rain(lakes)
       DrinkWater(individuals, lakes)
       for r in range(len(individuals)):
           individuals[r].waterstore -= 1
       individuals = list(filter(lambda x: x.waterstore > 0,individuals))
       individualTotalWater = []
       for i in individuals:
           individualTotalWater.append(i.waterstore)
       AmountWater = lakes[0].water
       Logg = [AmountWater, sum(individualTotalWater), len(individuals)]
       with open("NewCSVTestFile.csv", "a") as f:
               openfile = csv.writer(f, delimiter=",")
               openfile.writerow(Logg)
       print("logg " + str(Logg))
       print()
       days += 1

有什么建议吗?

标签: python

解决方案


“UnboundLocalError:分配前引用的局部变量‘个人’”。

您的第一个参考individuals出现在这里:

SeekWaterHole(individuals, lakes)

但它尚未在您的函数中定义,也没有作为函数的输入。因此,python 不知道它引用了什么。


推荐阅读