Python > 言語 > データ型 > 列型 > リスト型


Python - 言語 - データ型 - 列型 - リスト型

*

*



リスト型と値

[ edit ]

  • 変更不能
    イミュータブル
    (immutable)

    変更可能
    ミュータブル
    (mutable)

    文字列

    テキスト列型

    str型

    リスト型

    list型

    タプル型

    tuple型

    range型

    range型

リスト型のデータ・リテラル

[ edit ]

  • [..., ..., ...] 

>>> [1,2,3,4]
[1, 2, 3, 4]

>>> x  = [1,2,3,4,5]
>>> print(x)
[1, 2, 3, 4, 5]
  • 各要素のデータ型は,異なっていてもよい(配列とは本質的に異なる).

>>> [1,"a",2,"b",3]
[1, 'a', 2, 'b', 3]
  • リストの入れ子(ネスティング).

>>> [1,"a",[2,3],["b","c"],4,5]
[1, 'a', [2, 3], ['b', 'c'], 4, 5]
  • 二重リスト(二次元配列のように使うとき)

>>> [[1,2,3],[4.5,6],[7,8,9]]
[[1, 2, 3], [4.5, 6], [7, 8, 9]]

リスト型の値

[ edit ]

  • 新しいリストを作る

>>> list()
[]

>>> type( [1,2,3,4,5] )
<class 'list'>

>>> [0]*5
[0, 0, 0, 0, 0]

>>> []+[1]+[2]+[3]+[4]+[5]
[1, 2, 3, 4, 5]
  • 既存のリストの末尾に要素を追加する

>>> s = []
>>> s.append(1)
>>> s.append(2)
>>> s.append(3)
>>> s.append(4)
>>> s.append(5)
>>> s
[1, 2, 3, 4, 5]


リストの操作

要素へのアクセス

[ edit ]

添え字(インデックス)によるアクセス

  • 添え字(インデックス)によるアクセス
    • [n]n番目の要素を参照します

    • 添え字は0から始まる(左端の添え字がゼロ).

>>> x = ["a","b","c","d","e","f","g"]

>>> x[0]
'a'

>>> x[4]
'e'

>>> x[len(x)-1]
'g'
  • 範囲を越えた場合
    • 実行時エラーを起こす
    • 添え字エラー(IndexError)例外が送出される

>>> x = ["a","b","c","d","e","f","g"]

>>> x[4]
'e'

>>> x[7]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

>>> x[len(x)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

各要素への順次アクセス

  • 方法(1): リストの要素に順にアクセスする: for文をシーケンスに対して利用する

>>> x = [1, 2, 3, 4, 5]

>>> for e in x: print( e * 2 )
...
2
4
6
8
10

x = [1, 2, 3, 4, 5]

for e in x:
    print( e )
  • 方法(2): リストの要素に順にアクセスする: 配列の長さ添え字rangeを生成し,添え字でアクセスする
    • 「添え字の範囲」を間違えて(たとえば,range( len( x )+3 )),添え字が範囲を越えてしまう実行時エラーとなるので,(1)の方法の方が望ましい

>>> x = [1, 2, 3, 4, 5]

>>> for i in range( len( x ) ): print( x[i] * 2 )
...
2
4
6
8
10

>>> x = [1, 2, 3, 4, 5]

>>> for i in range( len( x ) + 3 ): print( x[i] * 2 )
...
2
4
6
8
10
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

x = [1, 2, 3, 4, 5]

for i in range( len( x ) ): 
    print( x[i] )
  • 方法(3): 【高度な話題→後日】 リストの内包定義
    • 高度な話題ですが,簡潔な表現なので,後日取り上げる予定です.

>>> x = [1, 2, 3, 4, 5]

>>> [ e*2 for e in x]
[2, 4, 6, 8, 10]
  • 方法(4): 【高度な話題→この授業の範囲外】 高階関数map( func, list)

    • 高度な話題なので,この授業の範囲外とする予定ですが,進み具合によっては,後日取り上げるかもしれません

>>> x = [1, 2, 3, 4, 5]

>>> print( list( map( lambda e: e*2, x) ) )
[2, 4, 6, 8, 10]

部分列(スライス)アクセス

[ edit ]

  • 部分列(スライス)アクセス
    • [n:m] で n番目から m - 1番目の要素を参照します

      • n を省略すると最初から(左端,すなわち0番目から)
      • m を省略すると最後まで(右端,すなわちlen(...)-1番目まで)

>>> x = ["a","b","c","d","e","f","g","h","i"]

>>> x[2:6]
['c', 'd', 'e', 'f']

>>> x[:6]
['a', 'b', 'c', 'd', 'e', 'f']

>>> x[2:]
['c', 'd', 'e', 'f', 'g', 'h', 'i']
  • 部分範囲(スライス)
    • [n:m:s]の場合,s個とばし

>>> x = ["a","b","c","d","e","f","g","h","i"]

>>> x[2:6:2]
['c', 'e']

>>> x[2::2]
['c', 'e', 'g', 'i']

>>> x[::2]
['a', 'c', 'e', 'g', 'i']
  • 部分範囲(スライス)
    • n, m にマイナスの値を指定した場合,後ろから数えます

>>> x = ["a","b","c","d","e","f","g","h","i"]

>>> x[-1]
'i'

>>> x[-2]
'h'

>>> x[-5:-1]
['e', 'f', 'g', 'h']

>>> x[-5:-1:2]
['e', 'g']

>>> x[-5:-1:-2]
[]

リストの操作 (変更可能なシーケンス操作)

[ edit ]

リストの操作: 連結(+)

  • リストの連結(+)

>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]

>>> [1,2,3]+["a","b","c"]
[1, 2, 3, 'a', 'b', 'c']

リストの操作: リストの要素数(len)

  • リストの要素数(len)

>>> len([1,2,3,4,5])
5

>>> len([1,2,[3,4,[5,6],7],8])
4
*

リファレンス

*



Software Engineering(IIJIMA, Tadashi -- Keio Univ.)



*

SoftEng: Python/Lang/DataType/Sequence/List (last edited 2018-09-28 12:52:18 by TadashiIijima)