回答編集履歴

5

修正

2019/11/21 16:25

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -66,7 +66,7 @@
66
66
 
67
67
  しかし、xが非常に多い要素を持つときはメモリを圧迫する恐れもあります。
68
68
 
69
- そのような事情がある際は次のようにitertools.isliceを使うと良いょう
69
+ そのような事情がある際は次のようにitertools.isliceを使っても良いかもれません
70
70
 
71
71
  ```Python
72
72
 

4

追記

2019/11/21 16:25

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -53,3 +53,59 @@
53
53
 
54
54
 
55
55
  リンク先で紹介されている簡易実装では、is演算子がその真価を発揮しています。
56
+
57
+
58
+
59
+ 解決策
60
+
61
+ ---
62
+
63
+ 前以てイテレータをリストに変換するのが最も素直でしょう。
64
+
65
+
66
+
67
+ しかし、xが非常に多い要素を持つときはメモリを圧迫する恐れもあります。
68
+
69
+ そのような事情がある際は次のようにitertools.isliceを使うと良いでしょう。
70
+
71
+ ```Python
72
+
73
+ import itertools
74
+
75
+
76
+
77
+
78
+
79
+ x = [1, 1, 1, 2, 2, 3, 3, 4, 4, 4]
80
+
81
+ g_it = itertools.groupby(x)
82
+
83
+
84
+
85
+ n = 2
86
+
87
+ while True:
88
+
89
+ elems = [list(it) for k, it in itertools.islice(g_it, 0, n)]
90
+
91
+ if not elems:
92
+
93
+ break
94
+
95
+
96
+
97
+ print(*elems)
98
+
99
+ ```
100
+
101
+
102
+
103
+ **実行結果** [Wandbox](https://wandbox.org/permlink/iD1Bi94tklaNDCyJ)
104
+
105
+ ```
106
+
107
+ [1, 1, 1] [2, 2]
108
+
109
+ [3, 3] [4, 4, 4]
110
+
111
+ ```

3

追記

2019/11/21 16:24

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  これは非常に嬉しい作りなのですが、
42
42
 
43
- 如何せんchunkedのようなグルーピング関数との相性は最悪です。
43
+ 如何せんchunkedのような『先読み』を要するグルーピング関数との相性は最悪です。
44
44
 
45
45
 
46
46
 

2

修正

2019/11/21 15:52

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -52,4 +52,4 @@
52
52
 
53
53
 
54
54
 
55
- リンク先では簡易な実装も紹介されており、is演算子がその真価を発揮しています。
55
+ リンク先で紹介されている簡易実装では、is演算子がその真価を発揮しています。

1

修正

2019/11/21 15:50

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -8,11 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- g_it = iter(
12
-
13
- itertools.groupby([1, 1, 2, 2, 3, 3])
11
+ g_it = itertools.groupby([1, 1, 2, 2, 3, 3])
14
-
15
- )
16
12
 
17
13
 
18
14
 
@@ -28,13 +24,13 @@
28
24
 
29
25
  k3, it3 = next(g_it)
30
26
 
31
- print(k3, list(it3)) # => 2 [2, 2]
27
+ print(k3, list(it3)) # => 3 [3, 3]
32
28
 
33
29
  ```
34
30
 
35
31
 
36
32
 
37
- [Wandbox](https://wandbox.org/permlink/oMuoOifa9SYbCBLu)
33
+ [Wandbox](https://wandbox.org/permlink/HKYCiATYbaPqwDK4)
38
34
 
39
35
 
40
36
 
@@ -45,3 +41,15 @@
45
41
  これは非常に嬉しい作りなのですが、
46
42
 
47
43
  如何せんchunkedのようなグルーピング関数との相性は最悪です。
44
+
45
+
46
+
47
+ > 返されるグループはそれ自体がイテレータで、 groupby() と iterable を共有しています。もととなる iterable を共有しているため、 groupby() オブジェクトの要素取り出しを先に進めると、それ以前の要素であるグループは見えなくなってしまいます。従って、データが後で必要な場合にはリストの形で保存しておく必要があります
48
+
49
+
50
+
51
+ **引用元**: [itertools.groupby — Python 3.8.0 ドキュメント](https://docs.python.org/ja/3/library/itertools.html#itertools.groupby)
52
+
53
+
54
+
55
+ リンク先では簡易な実装も紹介されており、is演算子がその真価を発揮しています。