リスト型とタプル型のテスト

例77 リスト型とタプル型のテスト

[任意]ファイル名: list_and_tuple.py エンコーディング: UTF-8

#! /usr/bin/python
# -*- coding: utf-8 -*-

# リスト型とタプル型のテスト1

print ('リスト型とタプル型のテスト#1')

# 「[」と「]」で囲まれたコンマ区切りの部分はリストというデータ型でデータの並びを入れるもの
# データの一部を書き換えたりデータの追加/削除をしたりもできる
# 入れるデータの型は同じでなくてもよい
test = [1, 2, 3.14, '456']

# リストの中身には「[」と「]」で番号(最初の項目は0番)を指定して
# 「[リスト変数][[数字]]」の形式でアクセスする
print ('test[0]:{0} test[1]:{1} test[2]:{2} test[3]:{3}'.format (test[0], test[1], test[2], test[3]))
# 文字列のformat()では「*[リスト変数]」で順にリストの中身を取り出せる
print ('test[0]:{0} test[1]:{1} test[2]:{2} test[3]:{3}'.format (*test))

# ここから操作を行うテスト
# 先頭(0番目)の項目を「abc」にする(元の0番目の項目の内容は消える)
print ('先頭を"abc"に変更します')
test[0] = 'abc'
# 「[リスト変数].append([追加したい内容])」で
# 末尾に新しいデータを追加する
print ('末尾に"foo"を追加します')
test.append ('foo')

# 「for [個別の項目を入れる変数] in [リスト変数]:」の後で字下げした部分で
# リスト内の個別の項目を順に(ループで)処理できる
i = 0
for t in test:
  # この字下げした部分がtestの項目の数だけ繰り返し処理され、個別の項目が変数tで取り出せる
  # この時点のtestの内容は、最初が「abc」,最後は「456」の後ろに「foo」が追加された状態
  # それぞれ改行ではなくスペースを終端にして表示
  print ('test[{0}]:{1}'.format (i, t), end=' ')
  i += 1
print ()  # 改行のみ表示(スクリプトの出力を整形する目的)

# 「[リスト変数].pop()」で
# 末尾のデータを削りつつ戻り値として取り出す
print ('末尾のデータを削除して取り出します(内容は"{0}")'.format (test.pop ()))
i = 0
for t in test:
  print ('test[{0}]:{1}'.format (i, t), end=' ')
  i += 1
print ()

# del()に入れた内容はリストから消え、詰められる
# この場合は先頭の「abc」が消える
print ('0番の項目を削除します')
del (test[0])
i = 0
for t in test:
  print ('test[{0}]:{1}'.format (i, t), end=' ')
  i += 1
print ()

# 「[リスト変数].insert([位置(0から)], [挿入する内容])」で
# 指定位置にデータを挟み込む(挿入する)
print ('2番に"new"を挿入します')
test.insert (2, 'new')
i = 0
for t in test:
  print ('test[{0}]:{1}'.format (i, t), end=' ')
  i += 1
print ()

# 1番から3番まで(test[1]とtest[2])の内容をまとめて「[999,20]」に書き換える
print ('1番から3番までをまとめて[999,20]に書き換えます')
test[1:3] = [999, 20]
i = 0
for t in test:
  print ('test[{0}]:{1}'.format (i, t), end=' ')
  i += 1
print ()

# 「(」と「)」で囲まれたコンマ区切りの部分はタプルというデータ型で複数のデータをまとめて扱うもの
# データの一部を書き換えたりデータの追加/削除をしたりはできない
test = ('abc', 123, 456)

# タプルの個別の内容の取り出し方はリストと同様
print ('test[0]:{0} test[1]:{1} test[2]:{2}'.format (test[0], test[1], test[2]))
print ('test[0]:{0} test[1]:{1} test[2]:{2}'.format (*test))

# 中身を変数にバラすことができる
# 中身の順番と同じ順番で変数に代入される
(test_0, test_1, test_2) = test
print ('test[0]:{0} test[1]:{1} test[2]:{2}'.format (test_0, test_1, test_2))

# タプルの項目は書き換えができないのを確認するテスト
print ('タプルの要素に対する書き込みを試行します')
try:
  test[0] = 'abc'
except TypeError as e:
  print ('TypeError: {0}'.format (e))

print ('終わり')

実行例:

リスト型とタプル型のテスト#1
test[0]:1 test[1]:2 test[2]:3.14 test[3]:456
test[0]:1 test[1]:2 test[2]:3.14 test[3]:456
先頭を"abc"に変更します
末尾に"foo"を追加します
test[0]:abc test[1]:2 test[2]:3.14 test[3]:456 test[4]:foo
末尾のデータを削除して取り出します(内容は"foo")
test[0]:abc test[1]:2 test[2]:3.14 test[3]:456
0番の項目を削除します
test[0]:2 test[1]:3.14 test[2]:456
2番に"new"を挿入します
test[0]:2 test[1]:3.14 test[2]:new test[3]:456
1番から3番までをまとめて[999,20]に書き換えます
test[0]:2 test[1]:999 test[2]:20 test[3]:456
test[0]:abc test[1]:123 test[2]:456
test[0]:abc test[1]:123 test[2]:456
test[0]:abc test[1]:123 test[2]:456
タプルの要素に対する書き込みを試行します
TypeError: 'tuple' object does not support item assignment
終わり