Итак, я могу sh редактировать список, состоящий из классов, этот код представляет собой симуляцию двух животных, поедающих друг друга. Эта функция касается одного животного (хищника), поедающего другое животное (добычу). Чтобы избежать того, что l oop станет "испорченным", когда я уберу одно животное из списка, я решил сделать это следующим образом: самый сильный хищник должен есть первым, и он должен съесть самую слабую добычу, проверяя вероятность если он будет пытаться или не пытаться съесть добычу.
def eat_predator(self):
if len(self.specie_classes["Prey"]) > 0:
self.specie_classes["Predator"].sort(
key=lambda specie: specie.strength, reverse=True
)
for pred in self.specie_classes["Predator"]:
prey_survivors= []
food_apetite= pred.req['Apetite'] # This is how much food he wishes to eat
current_food = 0
self.specie_classes["Prey"].sort(
key=lambda specie: specie.strength
)
for prey in self.specie_classes["Prey"]:
if food_apetite >= current_food:
break
if specie.determine_kill(prey):
current_food += prey.weight
pred.increase_eat_weight(prey.weight)
prey_survivors = [
surv_prey
for surv_prey in self.specie_classes["Prey"]
if surv_prey != prey
]
self.specie_classes["Prey"] = prey_survivors
Это мое текущее решение, основной вопрос в том, как избежать создания нового списка каждый раз, когда я хочу обновить список, содержащий классы Prey (animal) (без нарушения итерации)
Вот чего я буду sh избегать:
d = list(range(10))
for n in d:
print('Testing', n)
if n % 2 == 0 or n % 3 == 0:
d.remove(n)
print(d)
Testing 0
Testing 2
Testing 4
Testing 6
Testing 8
[1, 3, 5, 7, 9]