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

回答編集履歴

4

d

2019/03/18 02:42

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -17,7 +17,7 @@
17
17
  enum = enumerate([1, 2, 3, 4])
18
18
  ```
19
19
 
20
- enumerate オブジェクトは iterator であり、__next__() が呼ばれると、インスタンス化したときに渡した iterable なオブジェクトの要素を添え字付きで1つずつ返すようになっています。
20
+ enumerate オブジェクトは iterator であり、`__next__()` が呼ばれると、インスタンス化したときに渡した iterable なオブジェクトの要素を添え字付きで1つずつ返すようになっています。
21
21
  添字操作をする場合は「list() でリストにする」など添字操作が行えるオブジェクトに変換する必要があります。
22
22
 
23
23
  ```python

3

g

2019/03/18 02:42

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -17,7 +17,7 @@
17
17
  enum = enumerate([1, 2, 3, 4])
18
18
  ```
19
19
 
20
- enumerate オブジェクトは iterable であり、`__iter__()` が呼ばれると、インスタンス化したときに渡した iterable なオブジェクトを添え字付きで1つずつ返すようになっています。
20
+ enumerate オブジェクトは iterator であり、__next__() が呼ばれると、インスタンス化したときに渡した iterable なオブジェクトの要素を添え字付きで1つずつ返すようになっています。
21
21
  添字操作をする場合は「list() でリストにする」など添字操作が行えるオブジェクトに変換する必要があります。
22
22
 
23
23
  ```python

2

d

2019/03/18 02:41

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -1,3 +1,11 @@
1
+ > 1.エラーの意味は「添え字にアクセスできないオブジェクトです」ですか?
2
+ その認識であっています。
3
+
4
+ > 2.list()があるとエラーが出ないようになる理屈を教えてください
5
+ 添字でアクセスできるオブジェクトに変換したため。
6
+
7
+ ----
8
+
1
9
  [組み込み関数 — Python 3.7.3rc1 ドキュメント](https://docs.python.org/ja/3/library/functions.html#enumerate)
2
10
 
3
11
  > enumerate オブジェクトを返します。 iterable は、シーケンスか iterator か、あるいはイテレーションをサポートするその他のオブジェクトでなければなりません。 enumerate() によって返されたイテレータの __next__() メソッドは、 (デフォルトでは 0 となる start からの) カウントと、 iterable 上のイテレーションによって得られた値を含むタプルを返します。
@@ -28,4 +36,7 @@
28
36
 
29
37
  # (3) enumerate オブジェクトからリストを作成する。
30
38
  print(list(enum)) # [(0, 1), (1, 2), (2, 3), (3, 4)]
31
- ```
39
+ ```
40
+ > 3.そもそも[:max_length]は不要な気がするのですが、なぜあるのでしょうか
41
+
42
+ コメントの `We will only consider the first `max_length` words in each sample.` とあるように文章は長さがまちまちなので、各要素が単語である文章を表すリストから最大で max_length 要素だけ取り出すということですね。

1

2019/03/17 14:37

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -2,11 +2,15 @@
2
2
 
3
3
  > enumerate オブジェクトを返します。 iterable は、シーケンスか iterator か、あるいはイテレーションをサポートするその他のオブジェクトでなければなりません。 enumerate() によって返されたイテレータの __next__() メソッドは、 (デフォルトでは 0 となる start からの) カウントと、 iterable 上のイテレーションによって得られた値を含むタプルを返します。
4
4
 
5
- 以下を見ればわかると思いますが、enumerate() の返り値は enumerate オブジェクトであって、リストではないので、添字操作はできません。(subscribtable でない)
5
+ enumerate() の返り値は enumerate オブジェクトであって、添字操作はサポートされていません。(subscribtableでない)
6
- enumerate オブジェクトは iterable であり、__iter__() が呼ばれると、インスタンス化したときに渡した iterable なオブジェクトを添え字付きで1つずつ返すというものです。
7
6
 
7
+ 以下の例では、enumerate() の返り値 enum は [(0, 1), (1, 2), (2, 3), (3, 4)] のようなリストであると思って添字操作を行ったのだと思いますが、enum[:2] のように添字操作は行なえません。
8
+ ```
9
+ enum = enumerate([1, 2, 3, 4])
10
+ ```
8
11
 
12
+ enumerate オブジェクトは iterable であり、`__iter__()` が呼ばれると、インスタンス化したときに渡した iterable なオブジェクトを添え字付きで1つずつ返すようになっています。
9
- 添字操作をする場合は list() などでリストに変換する必要があります。
13
+ 添字操作をする場合はlist() でリストにする」など添字操作が行えるオブジェクトに変換する必要があります。
10
14
 
11
15
  ```python
12
16
  from collections.abc import Iterable