23
23
"""
24
24
25
25
26
- def procentual_proximity (
27
- source_data : list [list [float ]], weights : list [int ]
28
- ) -> list [list [float ]]:
26
+ def get_data (source_data : list [list [float ]]) -> list [list [float ]]:
29
27
"""
30
- weights - int list
31
- possible values - 0 / 1
32
- 0 if lower values have higher weight in the data set
33
- 1 if higher values have higher weight in the data set
34
-
35
- >>> procentual_proximity([[20, 60, 2012],[23, 90, 2015],[22, 50, 2011]], [0, 0, 1])
36
- [[20, 60, 2012, 2.0], [23, 90, 2015, 1.0], [22, 50, 2011, 1.3333333333333335]]
28
+ >>> get_data([[20, 60, 2012],[23, 90, 2015],[22, 50, 2011]])
29
+ [[20.0, 23.0, 22.0], [60.0, 90.0, 50.0], [2012.0, 2015.0, 2011.0]]
37
30
"""
38
-
39
- # getting data
40
31
data_lists : list [list [float ]] = []
41
32
for data in source_data :
42
33
for i , el in enumerate (data ):
43
34
if len (data_lists ) < i + 1 :
44
35
data_lists .append ([])
45
36
data_lists [i ].append (float (el ))
37
+ return data_lists
38
+
46
39
40
+ def calculate_each_score (
41
+ data_lists : list [list [float ]], weights : list [int ]
42
+ ) -> list [list [float ]]:
43
+ """
44
+ >>> calculate_each_score([[20, 23, 22], [60, 90, 50], [2012, 2015, 2011]],
45
+ ... [0, 0, 1])
46
+ [[1.0, 0.0, 0.33333333333333337], [0.75, 0.0, 1.0], [0.25, 1.0, 0.0]]
47
+ """
47
48
score_lists : list [list [float ]] = []
48
- # calculating each score
49
49
for dlist , weight in zip (data_lists , weights ):
50
50
mind = min (dlist )
51
51
maxd = max (dlist )
@@ -72,14 +72,43 @@ def procentual_proximity(
72
72
73
73
score_lists .append (score )
74
74
75
+ return score_lists
76
+
77
+
78
+ def generate_final_scores (score_lists : list [list [float ]]) -> list [float ]:
79
+ """
80
+ >>> generate_final_scores([[1.0, 0.0, 0.33333333333333337],
81
+ ... [0.75, 0.0, 1.0],
82
+ ... [0.25, 1.0, 0.0]])
83
+ [2.0, 1.0, 1.3333333333333335]
84
+ """
75
85
# initialize final scores
76
86
final_scores : list [float ] = [0 for i in range (len (score_lists [0 ]))]
77
87
78
- # generate final scores
79
88
for slist in score_lists :
80
89
for j , ele in enumerate (slist ):
81
90
final_scores [j ] = final_scores [j ] + ele
82
91
92
+ return final_scores
93
+
94
+
95
+ def procentual_proximity (
96
+ source_data : list [list [float ]], weights : list [int ]
97
+ ) -> list [list [float ]]:
98
+ """
99
+ weights - int list
100
+ possible values - 0 / 1
101
+ 0 if lower values have higher weight in the data set
102
+ 1 if higher values have higher weight in the data set
103
+
104
+ >>> procentual_proximity([[20, 60, 2012],[23, 90, 2015],[22, 50, 2011]], [0, 0, 1])
105
+ [[20, 60, 2012, 2.0], [23, 90, 2015, 1.0], [22, 50, 2011, 1.3333333333333335]]
106
+ """
107
+
108
+ data_lists = get_data (source_data )
109
+ score_lists = calculate_each_score (data_lists , weights )
110
+ final_scores = generate_final_scores (score_lists )
111
+
83
112
# append scores to source data
84
113
for i , ele in enumerate (final_scores ):
85
114
source_data [i ].append (ele )
0 commit comments