未验证 提交 0fc24e86 编写于 作者: A Andrew Grangaard 提交者: GitHub

[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
上级 5c8a6c82
...@@ -20,39 +20,38 @@ We want the vehicle with the lowest price, ...@@ -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: ...@@ -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):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册