FAQ: Code Challenge: Lists - Middle Item

3 posts were split to a new topic: Why do I have to include the /2 in the int()?

2 posts were split to a new topic: Spoiler

8 posts were split to a new topic: Is middle different than median?

2 posts were split to a new topic: Flaming troll

3 posts were split to a new topic: Solution suggestions for Middle item challenge

2 posts were split to a new topic: List indexes cannot have floats [solved]

2 posts were merged into an existing topic: List indexes cannot have floats [solved]

2 posts were split to a new topic: Why is my sum variable text white? [solved]

3 posts were merged into an existing topic: List indexes cannot have floats [solved]

7 posts were split to a new topic: How does integer casting work? int() [solved]

2 posts were merged into an existing topic: List indexes cannot have floats [solved]

2 posts were split to a new topic: Challenge lists - why doesn’t this work [solved]

2 posts were merged into an existing topic: List indexes cannot have floats [solved]

3 posts were split to a new topic: Lists challenge - code problem [solved]

4 posts were merged into an existing topic: List indexes cannot have floats [solved]

I solved this by making the two scenarios into variables; even and odd. Each variable finds their respective midpoints, which makes them easy to average and call in the control flow. There’s probably a more elegant way to solve this, though, haha.

def middle_element(lst):
  even = int(len(lst)/2) - 1
  odd = int(len(lst)/2)
  if  len(lst) % 2 != 0:
    return lst[odd]
  else:
    return (lst[even]+lst[odd])/2

Rather than doing floating point arithmetic and rounding later, stick with integer operations:

# don't:
int(a / b)
# do:
a // b
1 Like

Ah! Wasn’t aware of that operator. Thanks!

Would be worth the ten minutes or so it will take to research it further while it is fresh in your mind.

floor division

It’s important to note that floats have floors, too, and if one or both operands are a float, the result will be a float.

10.3 // 2  =>  5.0

Only when both operands are integer, will the quotient be an integer.

2 Likes

I couldn’t remember how to fool python into accounting for odd or even (that was a few excercises ago), so I hit the “see solution” button. It wrote this:

#Write your function here
def middle_element(lst):
  if len(lst) % 2 == 0:
    sum = lst[int(len(lst)/2)] + lst[int(len(lst)/2) - 1]
    return sum / 2
  else:
    return lst[int(len(lst)/2)]

#Uncomment the line below when your function is done
print(middle_element([5, 2, -10, -4, 4, 5]))

and when I hit solve it printed out: -7.0

I thought the program was supposed to show the middle 2 elements when even. -7.0 isn’t even the middle 2 added or subtracted from each other. So what the H? Did I fully misunderstand the exercise, or was the solution wrong?