vendredi 27 décembre 2019

Making use of dict.get for if elif and else in List Comprehension

I wanted to implement if elif and else inside a list comprehension and in this stackoverflow answer I found a way of doing the same.

So let me explain what the issue is:

As per the answer, the dict.get() can be used in following way to use conditionals in list comprehension:

>>> d = {1: 'yes', 2: 'no'}
>>> [d.get(x, 'idle') for x in l]
['yes', 'no', 'idle', 'idle', 'idle']

Seems nice and good. But I am running into a different kind of problem. So I need to use the same method to work with the index of some other list. Allow me to explain:

perc = np.array([0, 0.25, 0.5, 0.75, 1])

d= {0: 0, len(perc):1}

result = [d.get(x, (perc[x-1]+perc[x])/2) for x in range(len(perc)+1)]

So in short I want my output to be 0 and 1 for x being 0 and len(perc), or else average of previous value and current value.

Now, this is giving me an error:

IndexError: index 5 is out of bounds for axis 0 with size 5

My question is, wasn't dict.get(key[, default])defined as:

Return the value for key if key is in the dictionary, else default. If default is not given, it defaults to None, so that this method never raises a KeyError.

Now clearly 5 as a key is in the dictionary as len(perc)=5, then why the default condition is being checked first, which obviously will give an error as there is no 5th index in the array perc.

Aucun commentaire:

Enregistrer un commentaire