Python3.6.3チュートリアル写経20171111

4.7.6 ドキュメンテーション文字列~5.1.3 リストの内包表記 をやった。

以下メモ。

  • リストはappendとpopにより、スタック(LIFO)として使える
  • キュー(FIFO)としては、collectionsモジュールからdequeueをimportして以下のように使う
In [15]: from collections import deque

In [16]: queue = deque(["Eric", "John", "Michael"])

In [17]: queue
Out[17]: deque(['Eric', 'John', 'Michael'])

In [18]: queue.append("Terry")

In [19]: queue
Out[19]: deque(['Eric', 'John', 'Michael', 'Terry'])

In [20]: queue.append("Graham")

In [21]: queue
Out[21]: deque(['Eric', 'John', 'Michael', 'Terry', 'Graham'])

In [22]: queue.popleft()
Out[22]: 'Eric'

In [23]: queue
Out[23]: deque(['John', 'Michael', 'Terry', 'Graham'])

In [24]: queue.popleft()
Out[24]: 'John'

In [25]: queue
Out[25]: deque(['Michael', 'Terry', 'Graham'])
  • リスト内包表記では、mapやfilterが表現できる(mapは先頭の式で表し、filterはforの後ろのifで表す)
  • 数学的には、以下のIn [44]のように書けるとうれしいが、inの後ろに定義されていない変数を書くことはできない
In [42]: vec = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

In [43]: [num for elem in vec for num in elem]
Out[43]: [1, 2, 3, 4, 5, 6, 7, 8, 9]

In [44]: [num for num in elem for elem in vec]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-44-805eb91a5d03> in <module>()
----> 1 [num for num in elem for elem in vec]

NameError: name 'elem' is not defined