mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-02-21 08:42:03 +00:00
[mypy] Annotates other/scoring_algorithm (#5621)
* scoring_algorithm: Moves doctest into function docstring so it will be run * [mypy] annotates other/scoring_algorithm * [mypy] renames temp var to unique value to work around mypy issue in other/scoring_algorithm reusing loop variables with the same name and different types gives this very confusing mypy error response. pyright correctly infers the types without issue. ``` scoring_algorithm.py:58: error: Incompatible types in assignment (expression has type "float", variable has type "List[float]") scoring_algorithm.py:60: error: Unsupported operand types for - ("List[float]" and "float") scoring_algorithm.py:65: error: Incompatible types in assignment (expression has type "float", variable has type "List[float]") scoring_algorithm.py:67: error: Unsupported operand types for - ("List[float]" and "float") Found 4 errors in 1 file (checked 1 source file) ``` * scoring_algorithm: uses enumeration instead of manual indexing on loop var * scoring_algorithm: sometimes we look before we leap. * clean-up: runs `black` to fix formatting
This commit is contained in:
parent
5c8a6c8247
commit
0fc24e8629
|
@ -20,39 +20,38 @@ We want the vehicle with the lowest price,
|
||||||
lowest mileage but newest registration year.
|
lowest mileage but newest registration year.
|
||||||
Thus the weights for each column are as follows:
|
Thus the weights for each column are as follows:
|
||||||
[0, 0, 1]
|
[0, 0, 1]
|
||||||
|
|
||||||
>>> procentual_proximity([[20, 60, 2012],[23, 90, 2015],[22, 50, 2011]], [0, 0, 1])
|
|
||||||
[[20, 60, 2012, 2.0], [23, 90, 2015, 1.0], [22, 50, 2011, 1.3333333333333335]]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def procentual_proximity(source_data: list, weights: list) -> list:
|
def procentual_proximity(
|
||||||
|
source_data: list[list[float]], weights: list[int]
|
||||||
|
) -> list[list[float]]:
|
||||||
|
|
||||||
"""
|
"""
|
||||||
weights - int list
|
weights - int list
|
||||||
possible values - 0 / 1
|
possible values - 0 / 1
|
||||||
0 if lower values have higher weight in the data set
|
0 if lower values have higher weight in the data set
|
||||||
1 if higher values have higher weight in the data set
|
1 if higher values have higher weight in the data set
|
||||||
|
|
||||||
|
>>> procentual_proximity([[20, 60, 2012],[23, 90, 2015],[22, 50, 2011]], [0, 0, 1])
|
||||||
|
[[20, 60, 2012, 2.0], [23, 90, 2015, 1.0], [22, 50, 2011, 1.3333333333333335]]
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# getting data
|
# getting data
|
||||||
data_lists = []
|
data_lists: list[list[float]] = []
|
||||||
for item in source_data:
|
for data in source_data:
|
||||||
for i in range(len(item)):
|
for i, el in enumerate(data):
|
||||||
try:
|
if len(data_lists) < i + 1:
|
||||||
data_lists[i].append(float(item[i]))
|
|
||||||
except IndexError:
|
|
||||||
# generate corresponding number of lists
|
|
||||||
data_lists.append([])
|
data_lists.append([])
|
||||||
data_lists[i].append(float(item[i]))
|
data_lists[i].append(float(el))
|
||||||
|
|
||||||
score_lists = []
|
score_lists: list[list[float]] = []
|
||||||
# calculating each score
|
# calculating each score
|
||||||
for dlist, weight in zip(data_lists, weights):
|
for dlist, weight in zip(data_lists, weights):
|
||||||
mind = min(dlist)
|
mind = min(dlist)
|
||||||
maxd = max(dlist)
|
maxd = max(dlist)
|
||||||
|
|
||||||
score = []
|
score: list[float] = []
|
||||||
# for weight 0 score is 1 - actual score
|
# for weight 0 score is 1 - actual score
|
||||||
if weight == 0:
|
if weight == 0:
|
||||||
for item in dlist:
|
for item in dlist:
|
||||||
|
@ -75,7 +74,7 @@ def procentual_proximity(source_data: list, weights: list) -> list:
|
||||||
score_lists.append(score)
|
score_lists.append(score)
|
||||||
|
|
||||||
# initialize final scores
|
# initialize final scores
|
||||||
final_scores = [0 for i in range(len(score_lists[0]))]
|
final_scores: list[float] = [0 for i in range(len(score_lists[0]))]
|
||||||
|
|
||||||
# generate final scores
|
# generate final scores
|
||||||
for i, slist in enumerate(score_lists):
|
for i, slist in enumerate(score_lists):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user