The problem with your method is that you're are not building a list, such as this list comprehension does. Rather, you are simply indexing one item from np.asarray, and never saving the value. Furthermore, you don't even want to be indexing np.asarray, you want to pass a list to its constructor.
You need to create a temporary list to hold the return value of self.simulate(c) on each iteration of challenges and pass that list to np.asarray:
temp = []
for c in challenges:
temp.append(self.simulate(c))
array = np.asarray(temp)
Also, just to let you know, the "pythonic loop" you're referring to is usually called a list comprehension. "Pythonic" is just a name us Python community members use to describe something that is idiomatic to the Python language and its ideals.
yis overwritten at each iteration. create a list and append to it. Then build your array.