Skip to content

Mistake in maths/average_mode.py fixed. #4464

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Jun 4, 2021
39 changes: 22 additions & 17 deletions maths/average_mode.py
Original file line number Diff line number Diff line change
@@ -1,31 +1,36 @@
import statistics


def mode(input_list): # Defining function "mode."
def mode(input_list: list) -> list: # Defining function "mode."
"""This function returns the mode(Mode as in the measures of
central tendency) of the input data.

The input list may contain any Datastructure or any Datatype.

>>> input_list = [2, 3, 4, 5, 3, 4, 2, 5, 2, 2, 4, 2, 2, 2]
>>> mode(input_list)
2
>>> input_list = [2, 3, 4, 5, 3, 4, 2, 5, 2, 2, 4, 2, 2, 2]
>>> mode(input_list) == statistics.mode(input_list)
True
[2]
>>> input_list = [3, 4, 5, 3, 4, 2, 5, 2, 2, 4, 4, 2, 2, 2]
>>> mode(input_list)
[2]
>>> input_list = [3, 4, 5, 3, 4, 2, 5, 2, 2, 4, 4, 4, 2, 2, 4, 2]
>>> mode(input_list)
[2, 4]
>>> input_list = ["x", "y", "y", "z"]
>>> mode(input_list)
['y']
>>> input_list = ["x", "x" , "y", "y", "z"]
>>> mode(input_list)
['x', 'y']
"""
# Copying input_list to check with the index number later.
check_list = input_list.copy()
result = list() # Empty list to store the counts of elements in input_list
for x in input_list:
result.append(input_list.count(x))
input_list.remove(x)
y = max(result) # Gets the maximum value in the result list.
# Returns the value with the maximum number of repetitions.
return check_list[result.index(y)]
y = max(result) # Gets the maximum value in the result list.
# Gets values of modes
result = [input_list[i] for i, value in enumerate(result) if value == y]
result = list(set(result)) # Deletes duplicates
Copy link
Member

@mrmaxguns mrmaxguns Jun 4, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of creating a list, then converting it to a set, and then back to a list, you could do a set comprehension. Also, sorted takes any iterable, so passing a set to it (instead of converting it to a list first) will work.

Suggested change
result = [input_list[i] for i, value in enumerate(result) if value == y]
result = list(set(result)) # Deletes duplicates
result = {input_list[i] for i, value in enumerate(result) if value == y}

return sorted(result)


if __name__ == "__main__":
data = [2, 3, 4, 5, 3, 4, 2, 5, 2, 2, 4, 2, 2, 2]
print(mode(data))
print(statistics.mode(data))
import doctest

doctest.testmod()