python - 过滤列表而不创建新列表?
问题描述
所以我正在做一个项目,我有一个对象列表。我想根据对象属性过滤列表,但由于此列表在我的代码中的许多其他地方使用,我无法创建新列表,因为它会在我的代码中的其他地方产生问题。
我试过用这个:
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
有什么建议吗?
解决方案
“UnboundLocalError:分配前引用的局部变量‘个人’”。
您的第一个参考individuals
出现在这里:
SeekWaterHole(individuals, lakes)
但它尚未在您的函数中定义,也没有作为函数的输入。因此,python 不知道它引用了什么。
推荐阅读
- c++ - typedef 使用不当
- splunk - 在 Splunk 中创建静态表
- javascript - 用图像替换画布上的矩形
- python - 如何在 spacy 中标记新词汇?
- c# - C#在同一对象的无限列表上获取每个索引的对象
- java - 基于java中的属性对具有arraylist作为值的映射进行排序
- mongodb - InvalidPipelineOperator MongoError:无法识别的表达式“$replaceAll”
- python - 通过 Powershell 作为 System32 创建任务
- python - 给出所需输入时如何结束while循环?
- c - 为什么 for 循环中的 strlen 变量没有获取数据类型?