代码之家  ›  专栏  ›  技术社区  ›  Ole Kristian

过滤列表而不创建新列表?

  •  0
  • Ole Kristian  · 技术社区  · 7 年前

    我试着用这个:

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

    但它给了我“UnboundLocalError:赋值前引用的局部变量'Persons'。

    下面是出现问题的代码。

    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
    

    1 回复  |  直到 7 年前
        1
  •  0
  •   iacob    7 年前

    “UnboundLocalError:赋值前引用的局部变量'Persons'。

    你第一次提到 individuals

    SeekWaterHole(individuals, lakes)
    

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

        2
  •  0
  •   sam    7 年前

    from random import randint
    def day(numberOfDays):
    individuals=''
    days = 0
    while days < numberOfDays:
        print(str(days) + " days")
        child = randint(1,100)
        #if child > 95:
            #IndividualGenerator(randint(1,2))
        individuals=[]//initialize the list before using it
        #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
    day(10)