0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Python Language - Comprehension(内包表記)

Posted at

Python では、いくつかの言語がサポートしている内包表記 (Comprehension) が使用可能です。

5.1.3. List Comprehensions
https://docs.python.org/3.9/tutorial/datastructures.html#list-comprehensions

リスト内包表記
https://ja.wikipedia.org/wiki/%E3%83%AA%E3%82%B9%E3%83%88%E5%86%85%E5%8C%85%E8%A1%A8%E8%A8%98

ここでは、以下の代表的な Data Type について、簡単な使用方法をご紹介します。

  • String (Str)(文字列)
  • List(リスト)
  • Tuple(タプル)
  • Set(集合)
  • Dictionary (Dict)(辞書)

環境

以下の Python 3.9 / Linux 環境で確認します。

$ uname -si
Linux x86_64

$ python3.9 -V
Python 3.9.13

$ python3.9
Python 3.9.13 (main, Jun 15 2022, 11:24:50)
[GCC 8.5.0 20210514 (Red Hat 8.5.0-13)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

List

先の Python Tutorial の Link にもあるとおり、内包表記を使用する場面が最も多いのが List ではないかと思います。
例えば、以下のようなものが挙げられます。

>>> LIST=[x for x in range(0,20,2)]
>>> type(LIST)
<class 'list'>
>>> LIST
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

Set

Set は List 同様に内包表記を使用することができます。例えば、上記の List の例を少し変更するだけで可能です。

>>> SET={x for x in range(0,20,2)}
>>> type(SET)
<class 'set'>
>>> SET
{0, 2, 4, 6, 8, 10, 12, 14, 16, 18}

String (Str)

str() で List 同様に内包表記を使用してみます。

>>> STRING=str(x for x in range(0,20,2))
>>> type(STRING)
<class 'str'>
>>> STRING
'<generator object <genexpr> at 0x7ff4d208ec80>'

この場合、generator object が作成されます。
また、str() に List で内包表記を指定すると、[] に囲まれた全体が文字列として作成されます。

>>> STRING=str([x for x in range(0,20,2)])
>>> type(STRING)
<class 'str'>
>>> STRING
'[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]'
>>> STRING[0]
'['
>>> STRING[1]
'0'
>>> STRING[2]
','
>>> STRING[-1]
']'
>>>

Str における簡便な例としては、join() の内包表記で作成する方法があります。

>>> STRING=''.join([str(x) for x in range(0,20,2)])
>>> type(STRING)
<class 'str'>
>>> STRING
'024681012141618'

Tuple

Tuple で List 同様の内包表記を使用すると、generator object が作成されます。

>>> TUPLE=(x for x in range(0,20,2))
>>> type(TUPLE)
<class 'generator'>
>>> TUPLE
<generator object <genexpr> at 0x7ff4d208ef20>

tuple() で内包表記を使用すれば可能です。

>>> TUPLE=tuple(x for x in range(0,20,2))
>>> type(TUPLE)
<class 'tuple'>
>>> TUPLE
(0, 2, 4, 6, 8, 10, 12, 14, 16, 18)

Dictionary (Dict)

Dict では、List の例に倣って Key と Value を内包表記で指定することができます。

>>> DICT={x: x for x in range(0,20,2)}
>>> type(DICT)
<class 'dict'>
>>> DICT
{0: 0, 2: 2, 4: 4, 6: 6, 8: 8, 10: 10, 12: 12, 14: 14, 16: 16, 18: 18}

この例では、Key の型は int になります。

>>> for K in DICT.keys():
...     print(type(K), end=" ")
...
<class 'int'> <class 'int'> <class 'int'> <class 'int'> <class 'int'> <class 'int'> <class 'int'> <class 'int'> <class 'int'> <class 'int'> >>>

Key の型を Str にすることも可能です。

>>> DICT={str(x): x for x in range(0,20,2)}
>>> type(DICT)
<class 'dict'>
>>> DICT
{'0': 0, '2': 2, '4': 4, '6': 6, '8': 8, '10': 10, '12': 12, '14': 14, '16': 16, '18': 18}

>>> for K in DICT.keys():
...     print(type(K), end=" ")
...
<class 'str'> <class 'str'> <class 'str'> <class 'str'> <class 'str'> <class 'str'> <class 'str'> <class 'str'> <class 'str'> <class 'str'> >>>
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?