Home > Software engineering >  Write an generator/iterator expression for this sequence
Write an generator/iterator expression for this sequence

Time:12-02

I have this exercise that I fail to understand

Suppose we are given a list X of integers. We need to construct a sequence of indices (positions) of the elements in this list equal to the maximal element. The indicies in the sequence are in the ascending order.

Hint use the enumerator function

from typing import Iterator
X = [1,10,3,4,10,5]
S : Iterator[int] = YOUR_EXPRESSION
assert list(S)==[1,4]

This is the only thing I could come up with, but for sure it does not return [1,4]

If you wondering what I don't understand, it is not clear from reading the description how it could return [1,4].

Maybe you want to try to explain that to me first...

This is my (wrong) solution

my_enumerate=enumerate (X)
my_enumerate=(list(my_enumerate))
my_enumerate.sort(reverse=True)

CodePudding user response:

you can use a generator like this

max_val=max(X)
s = (i for i, v in enumerate(X) if v==max_val)

CodePudding user response:

This requires two steps:

  • Determine the maximum value with max
  • Iterate the indices of your list and retain those that have this maximum value

To avoid a bad time complexity, it is necessary to not repeat the first step:

S : Iterator[int] = (lambda mx: 
    (i for i, x in enumerate(X) if x == mx)
)(max(X))

CodePudding user response:

So you have the list X containing [1,10,3,4,10,5]. The maximal, or largest, element is 10. Which means we should return a list of all the indices where we find 10. There are two 10s at index 1 and 4 respectively.

Using enumerate you get at each iteration the index and element. You can use that to filter out the elements you don't need. List comprehensions are useful in this case, allowing for filtering with the if syntax i.e. [val for val in items if some_condition]

  • Related