teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

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

2017/08/21 13:44

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -47,14 +47,14 @@
47
47
  def debundle_list(src_list):
48
48
  ret_list = []
49
49
 
50
- def debundle(src, dst_list):
50
+ def debundle(src):
51
51
  if isinstance(src, list):
52
52
  for elem in src:
53
- debundle(elem, dst_list)
53
+ debundle(elem)
54
54
  else:
55
55
  ret_list.append(src)
56
56
 
57
- debundle(src_list, ret_list)
57
+ debundle(src_list)
58
58
  return ret_list
59
59
 
60
60
  def bundle_list(src_list, num):

1

追記

2017/08/21 13:44

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -39,4 +39,44 @@
39
39
  **注意**
40
40
  変数などの命名をする場合、組み込みの名前と重複しないように気を付けてください。
41
41
  `list`ではなく、`tmp_list` `my_list`などを用いてください。
42
- 発見しづらいエラーの原因となります。
42
+ 発見しづらいエラーの原因となります。
43
+
44
+ ---
45
+ 抽象化してみた。
46
+ ```Python
47
+ def debundle_list(src_list):
48
+ ret_list = []
49
+
50
+ def debundle(src, dst_list):
51
+ if isinstance(src, list):
52
+ for elem in src:
53
+ debundle(elem, dst_list)
54
+ else:
55
+ ret_list.append(src)
56
+
57
+ debundle(src_list, ret_list)
58
+ return ret_list
59
+
60
+ def bundle_list(src_list, num):
61
+ ret_list = []
62
+
63
+ tmp_list = []
64
+ for i, elem in enumerate(src_list):
65
+ tmp_list.append(elem)
66
+ if i % num == num-1:
67
+ ret_list.append(tmp_list)
68
+ tmp_list = []
69
+
70
+ return ret_list
71
+
72
+ def main():
73
+ my_list = [[[0.8, '太郎', '次郎'], [0.7, '三郎', '明']], [[0.6, '花子', '咲良'], [0.9, '太郎', '翔']]]
74
+ my_list = bundle_list(debundle_list(my_list), 3)
75
+ my_list.sort()
76
+
77
+ my_list = bundle_list(my_list, 2)
78
+ print(my_list)
79
+
80
+ if __name__ == '__main__':
81
+ main()
82
+ ```