回答編集履歴

6

追加投稿したので注釈を追記

2020/03/31 08:50

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -1,3 +1,7 @@
1
+ **追記:** よりシンプルに書けたので別回答で投稿します
2
+
3
+
4
+
1
5
  シンプルに、Bの要素を3回回し、Aを一個ずつ読み出し
2
6
 
3
7
  iter()化してnext()で読みだすところがポイント。

5

念の為list()追加

2020/03/31 08:50

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -66,9 +66,9 @@
66
66
 
67
67
 
68
68
 
69
- listA = map(list, chunk(2, "ABCDEFGHIJKL"))
69
+ listA = list(map(list, chunk(2, "ABCDEFGHIJKL")))
70
70
 
71
- listB = map(list, chunk(2, "あいうえ")) # [["あ", "い"], ["う", "え"]] を生成
71
+ listB = list(map(list, chunk(2, "あいうえ"))) # [["あ", "い"], ["う", "え"]] を生成
72
72
 
73
73
 
74
74
 
@@ -89,3 +89,7 @@
89
89
  pprint(listC)
90
90
 
91
91
  ```
92
+
93
+ 追記: ※ listをたくさん使ってますが、元のデータに合わせる為にいれただけなので、
94
+
95
+ 最後以外はなくてもロジック自体は動きます。

4

説明補足

2020/03/31 08:28

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -42,9 +42,15 @@
42
42
 
43
43
 
44
44
 
45
- repeatで["あ", "い"], ["あ", "い"], ["あ", "い"])というリストを作り
45
+ 説明追記:
46
46
 
47
+ listB の要素に対して、repeatで3回繰り返したリストを作り
48
+
49
+ chain.from_iterable で一段階フラットにします。
50
+
51
+ [["あ", "い"], ["あ", "い"], ["あ", "い"], ["う", "え"], ["う", "え"], ["う", "え"]]
52
+
47
- zipで掛け合わせます。
53
+ と、listA と同じ長さのリストになるので、zipで掛け合わせます。
48
54
 
49
55
 
50
56
 

3

コード修正: 出力(pprint)忘れ

2020/03/31 08:13

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -76,4 +76,10 @@
76
76
 
77
77
  listC = list(genListC(listA, listB))
78
78
 
79
+
80
+
81
+ from pprint import pprint
82
+
83
+ pprint(listC)
84
+
79
85
  ```

2

コード修正

2020/03/31 08:07

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- itertools 使った方法
41
+ itertools 使った方法(関数プログラミングとか好きな人向け
42
42
 
43
43
 
44
44
 
@@ -74,6 +74,6 @@
74
74
 
75
75
 
76
76
 
77
- listC = list(genListC())
77
+ listC = list(genListC(listA, listB))
78
78
 
79
79
  ```

1

コード修正

2020/03/31 08:06

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -54,8 +54,26 @@
54
54
 
55
55
 
56
56
 
57
- for a, b in zip(listA, chain.from_iterable(repeat(b,3) for b in listB)):
57
+ def chunk(size, seq):
58
58
 
59
+ return list(zip(*[iter(seq)]*size))
60
+
61
+
62
+
63
+ listA = map(list, chunk(2, "ABCDEFGHIJKL"))
64
+
65
+ listB = map(list, chunk(2, "あいうえ")) # [["あ", "い"], ["う", "え"]] を生成
66
+
67
+
68
+
69
+ def genListC(listA, listB):
70
+
71
+ for a, b in zip(listA, chain.from_iterable(repeat(b,3) for b in listB)):
72
+
59
- print(b + a)
73
+ yield b + a
74
+
75
+
76
+
77
+ listC = list(genListC())
60
78
 
61
79
  ```