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'> >>>