回答編集履歴

2

クロージャの利点が活かされてなかった

2017/08/21 13:44

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -96,13 +96,13 @@
96
96
 
97
97
 
98
98
 
99
- def debundle(src, dst_list):
99
+ def debundle(src):
100
100
 
101
101
  if isinstance(src, list):
102
102
 
103
103
  for elem in src:
104
104
 
105
- debundle(elem, dst_list)
105
+ debundle(elem)
106
106
 
107
107
  else:
108
108
 
@@ -110,7 +110,7 @@
110
110
 
111
111
 
112
112
 
113
- debundle(src_list, ret_list)
113
+ debundle(src_list)
114
114
 
115
115
  return ret_list
116
116
 

1

追記

2017/08/21 13:44

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -81,3 +81,83 @@
81
81
  `list`ではなく、`tmp_list` `my_list`などを用いてください。
82
82
 
83
83
  発見しづらいエラーの原因となります。
84
+
85
+
86
+
87
+ ---
88
+
89
+ 抽象化してみた。
90
+
91
+ ```Python
92
+
93
+ def debundle_list(src_list):
94
+
95
+ ret_list = []
96
+
97
+
98
+
99
+ def debundle(src, dst_list):
100
+
101
+ if isinstance(src, list):
102
+
103
+ for elem in src:
104
+
105
+ debundle(elem, dst_list)
106
+
107
+ else:
108
+
109
+ ret_list.append(src)
110
+
111
+
112
+
113
+ debundle(src_list, ret_list)
114
+
115
+ return ret_list
116
+
117
+
118
+
119
+ def bundle_list(src_list, num):
120
+
121
+ ret_list = []
122
+
123
+
124
+
125
+ tmp_list = []
126
+
127
+ for i, elem in enumerate(src_list):
128
+
129
+ tmp_list.append(elem)
130
+
131
+ if i % num == num-1:
132
+
133
+ ret_list.append(tmp_list)
134
+
135
+ tmp_list = []
136
+
137
+
138
+
139
+ return ret_list
140
+
141
+
142
+
143
+ def main():
144
+
145
+ my_list = [[[0.8, '太郎', '次郎'], [0.7, '三郎', '明']], [[0.6, '花子', '咲良'], [0.9, '太郎', '翔']]]
146
+
147
+ my_list = bundle_list(debundle_list(my_list), 3)
148
+
149
+ my_list.sort()
150
+
151
+
152
+
153
+ my_list = bundle_list(my_list, 2)
154
+
155
+ print(my_list)
156
+
157
+
158
+
159
+ if __name__ == '__main__':
160
+
161
+ main()
162
+
163
+ ```