Huy Vũ
Huy Vũ

Reputation: 45

Mean, Median, and Mode in Python

I'm doing a statistical problem set in Python on Hackerrank. When I input a list of values to calculate the mode. It shows me a runtime error.

# Enter your code here. Read input from STDIN. Print output to STDOUT

N = int(input())
X = list(map(int, input().split()))
X.sort()

# Find the mean
mean = sum(X) / N
print(mean)

# Find the median
if N % 2 == 0:
    median = (X[N//2] + X[N//2 - 1]) / 2
else:
    median = X[N//2]

print(median)

# Find the mode
occurrence = list([1 for _ in range(N)])

for i in range(N):
    for j in range(i+1, N):
if X[i] == X[j]:
    occurrence += 1

if max(occurrence) == 1:
    mode = min(X)
else:
    mode = X[occurrence[max(occurrence)]]

print(mode)

When I take a 2500 input for X, it just shows me a runtime error.

This is the link to the test case

enter link description here

Upvotes: 0

Views: 2097

Answers (4)

Akun Empat coba
Akun Empat coba

Reputation: 11

I use this when looking for mean, median, and mode

import numpy as np
from scipy import stats


n = int(input())
arr = list(map(int, input().split()))
print(np.mean(arr))
print(np.median(arr))
print(stats.mode(arr)[0][0])

Upvotes: 1

Arnol G
Arnol G

Reputation: 1

Here is a Mean, Median, and Mode class.

import statistics
from collections import Counter

def median(list):
    n = len(list)
    s = sorted(list)
    return (sum(s[n//2-1:n//2+1])/2.0, s[n//2])[n % 2] if n else None

def mean(list):
    if len(list) == 0:
        return 0
    list.sort()
    total = 0
    for number in list:
        total += number
    return total / len(list)

def mode(list):
    counter = Counter(list)
    if len(counter) > 1:  
        possible_mode, next_highest = counter.most_common(2)
        if possible_mode[1] > next_highest[1]:
            return possible_mode[0]
    return "None"

Upvotes: 0

recnac
recnac

Reputation: 3744

I have run your code, here is the compile problem:

for i in range(N):
    for j in range(i+1, N):
if X[i] == X[j]:
    occurrence += 1

I think your meaning is if inside two for, like:

    for i in range(N):
        for j in range(i + 1, N):
            if X[i] == X[j]:
                occurrence += 1

but occurrence is list here, can't plus by one, I think you means to count the occurrence of int, and output the max one? you can use defaultdict or Counter here, but defaultdict is only in one loops.

    # import collections
    # import operator

    # Find the mode
    occurrence = collections.Counter(X)
    # occurrence = collections.defaultdict(int)
    #
    # for i in range(N):
    #     occurrence[X[i]] += 1

    mode = max(occurrence.items(), key=operator.itemgetter(1))[0]

    print(mode)

Upvotes: 0

piyush daga
piyush daga

Reputation: 501

You are trying to add 1 to occurence which is of list type:

Also, I'm sure this may be a copying mistake but your loop is incorrect:

for i in range(N):
    for j in range(i+1, N):
if X[i] == X[j]:
    occurrence += 1

# It will be
for i in range(N):
    for j in range(i+1, N):
        if X[i] == X[j]:
            occurrence += 1

Then you might wanna change your occurrence to something like:

occurrence[i] += 1

# from 
occurrence += 1

Hope this helps

Upvotes: 0

Related Questions