LoginSignup
0
1

More than 3 years have passed since last update.

【python】内包表記。for文をシンプルに記述する。(コレクションとは、イテラブルとイテレータの違い)

Last updated at Posted at 2020-06-05

【python】内包表記。for文をシンプルに記述する。(コレクションとは、イテラブルとイテレータの違い)

for文を使って、listやset型など(コレクション)を作れる。

内包表記とは

for文を簡単に書ける書き方。

[式 for 変数 in イテラブル]
 └ []で囲むと出力の型はlistになる。
 └ {}だとセット型

[(i*2) for i in range(5)]

#出力
[0, 2, 4, 6, 8]

出力はlist形式。
以下と同じ。

arrs=[]
for i in range(5):
    arr = (i*2)
    arrs.append(arr)
arrs

#出力
[0, 2, 4, 6, 8]

▼{}にするとセット型

{(i*2) for i in range(5)}

#出力
{0, 2, 4, 6, 8}


補足

■コレクションとは

データ型の一種。
複数の要素を持てる型の総称。

list, range, setなど。

1つのデータしか持てない、str, int, floatなどはコレクションではない。

■イテラブルとイテレータの違い

イテラブルは繰り返し可能なオブジェクトの総称。
イテレータはイテラブルの1種(型)でより限定的。

・イテラブル(iterable)
繰り返し可能なオブジェクト。
list, tapple, range型のオブジェクト。

「for i in イテラブル」



・イテレータ
型の一種。(元の型_iterator)
iter関数で、イテレーターになる。
next関数が使える。

▼イテレータ型の確認

listの場合
arr = [1,2,3,4,5]

iterArr = iter(arr)
type(iterArr)

#list_iterator
tuppleの場合
brr = (1,2,3,4,5)

iterArr = iter(arr)
type(iterArr)

#tuple_iterator
rangeの場合
crr = range(5)

iterArr = iter(arr)
type(iterArr)

#range_iterator

・next関数
iter型の要素を一つづつ順番に取り出す。
不可逆。

next(イテレータ)

イテレータ&next
arr = [1,2,3,4,5]
iterArr = iter(arr)

next(iterArr)
1

next(iterArr)
2
~
~
~
next(iterArr)
5

next(iterArr)
StopIteration: #←全部抽出しきるとエラーになる

イテレータとnextを使うと順に処理をしていける。

▼イテレータはfor文も使える。
イテレータはイテラブルな要素の一つ。

arr = [1,2,3]
iterArr = iter(arr)

for i in iterArr:
    print(i)

1
2
3
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1