リスト タプル 集合

複数個の値を保存するデータ型にはリスト、タプルと集合がある。リストは、データの追加や削除などの操作が行える。これに対し、タプルはデータの追加や削除が行えない。集合は数学の集合と同じ性質を持ち、同じ値のデータが複数個代入しても一つしか残らない。

リスト

リストの作成

リストには複数のデータを代入することができる。代入されたデータは 1、2、3、・・・のように添字が付けられる。

arr = ['ACCG', 'CAAT', 'GTAA', 'TTGG']

print(arr[0])
## 'ACCG'

print(arr[1])
## 'CAAT'

print(arr[-1])
## 'TTGG'

print(arr[1:3])
## ['CAAT', 'GTAA']

print(len(arr))
## 4

リスト要素の取得

リスト要素の取得

リストの要素を取得するには、基本的にリストのインデックスを指定して取得する。

arr = ['ACCG', 'CAAT', 'GTAA', 'TTGG', 'ATTA', 'AAAA']
print(arr[0])
## ACCG

複数の要素を同時に取得する場合は、開始位置と終了位置を指定する。

print(arr[2:4])
## ['GTAA', 'TTGG']

最初の 3 要素を取得する場合は、次のように終了位置を指定すれば良い。

print(arr[:3])
## ['ACCG', 'CAAT', 'GTAA']
print(arr[0:3])
## ['ACCG', 'CAAT', 'GTAA']

最後の 3 要素を取得する場合は、次のように開始位置を指定すれば良い。

print(arr[(len(arr) - 3):])
## ['TTGG', 'ATTA', 'AAAA']

リストの奇数番目の要素を取得する。この場合、最初の要素から 2 つ置きに要素を取得すれば良いので、次のようにする。

print(arr[::2])
## ['ACCG', 'GTAA', 'ATTA']

リストの偶数番目の要素を取得する。この場合、2 番目の要素から 2 つ置きに要素を取得すれば良いので、次のようにする。

print(arr[1::2])
## ['CAAT', 'TTGG', 'AAAA']

for 文を利用したリスト要素の取得

リストにあるすべての要素を取得するとき、for 文を利用する。for 文では、リストの各要素が直接取り出される。

arr = ['ACCG', 'CAAT', 'GTAA', 'TTGG']

for ele in arr:
    print(ele)
## ACCG
## CAAT
## GTAA
## TTGG

インデックスを利用して要素を取り出したい場合は、次のようにする。

arr = ['ACCG', 'CAAT', 'GTAA', 'TTGG']
for i in range(0, len(arr)):
    print(i)
    print(arr[i])
## 0
## ACCG
## 1
## CAAT
## 2
## GTAA
## 3
## TTGG

リストの要素の追加

リストに要素を追加するとき、append または extend メソッドを利用します。他のプログラミング言語のように unshiftpush も利用できる。

append リストの最後に、オブジェクトを追加する
extend リストの最後に、オブジェクトを展開して追加する
arr_1 = ['AAA', 'CCC']
arr_2 = ['GGG', 'TTT']

arr_1.append(arr_2)
print(arr_1)    
## ['AAA', 'CCC', ['GGG', 'TTT']]


arr_1 = ['AAA', 'CCC']
arr_2 = ['GGG', 'TTT']

arr_1.extend(arr_2)
print(arr_1)
## ['AAA', 'CCC', 'GGG', 'TTT']

リストの要素の削除

リストの要素を削除するとき del または remove を利用する。リストの要素を削除して、削除した要素を受け取るには pop を利用する。

del 添字を利用してリストの要素を削除する
remove 要素の値を利用してリストの要素を削除する
pop リストの先頭、後尾あるいは任意の位置から要素を削除し、それを取得する
arr = ['A', 'C', 'G', 'T']
del arr[2]
print(arr) 
## ['A', 'C', 'T']


arr = ['A', 'C', 'G', 'T']
arr.remove('C')
print(arr) 
## ['A', 'G', 'T']


arr = ['A', 'C', 'G', 'T']
ele = arr.pop()
print(ele)
## 'T'
print(arr)
## ['A', 'C', 'G']


arr = ['A', 'C', 'G', 'T']
ele = arr.pop(0)
print(ele)
## 'A'
print(arr)  
## ['C', 'G', 'T']

リスト要素の並べ替え

リスト要素の値を並べ替えるとき sorted 関数を利用する。

arr = ['A', 'U', 'C', 'G', 'T', 'A']

sorted_arr = sorted(arr)
print(sorted_arr)
## ['A', 'A', 'C', 'G', 'T', 'U']

reversed_arr = reversed(arr)
print(reversed_arr)
## ['U', 'T', 'G', 'C', 'A', 'A']

リストの順序を逆にするとき、リスト型の reverse メソッドを利用する。

arr = ['A', 'U', 'C', 'G', 'T', 'A']
arr.reverse()
print(arr)
['A', 'T', 'G', 'C', 'U', 'A']

リスト要素の検索

リスト要素の値を検索するとき index を利用する。指定した値がリスト中に何個含まれるかを数えるとき count を利用する。

arr = ['A', 'C', 'G', 'T', 'A']

i = arr.index('A')
print(i)
## 0

i = arr.index('A', 2)
print(i)
## 4

i = arr.count('A')
print(i)
## 2

また、単純にある要素がリストに含まれているかどうかを調べるには in 演算子も使える。

arr = ['A', 'C', 'G', 'T', 'A']

if 'U' in arr:
    print('U is in the list.')
else:
    print('U is not in the list.')
## U is not in the list.


if 'U' not in arr:
    print('U is not in the list.')
else:
    print('U is in the list.')
## U is not in the list.

タプル

タプルはリストと似ている。ただし、リストは、作成した後に要素を追加したり、削除したりすることが可能であるのに対して、タプルは一度作成してしまうと、後から変更できない。

tp = ('A', 'C', 'G', 'T', 'A')

print(tp[1])
## 'C'
 
print(tp[2:4])
## ('G', 'T')

print(len(tp)) 
## 5

print(tp.index('G'))
## 2

print(tp.count('A'))
## 2


tp.appen('U')
## Traceback (most recent call last):
##   File "test.py", line 4, in 
##     arr.append('U')
## AttributeError: 'tuple' object has no attribute 'append'

tp.pop()
## Traceback (most recent call last):
##   File "test.py", line 6, in 
##     b = arr.pop()
## AttributeError: 'tuple' object has no attribute 'pop'

タプルとリストの交互変換は次のように行う。


li = ['A', 'C', 'G', 'T']
tuple(li)
## ('A', 'C', 'G', 'T')

tp = ('A', 'C', 'G', 'T')
list(li)
## ['A', 'C', 'G', 'T']

集合

Python の集合は、数学の集合に似てる。同じ値の要素が複数含まれると、一つに集約される。

se = {1, 2, 2, 3}

print(se)
## set([1, 2, 3])

print(len(se))
## 3

se.update({3, 4, 5})
print(se)
## set([1, 2, 3, 4, 5])

se.discard(3) 
print(se)
## set([1, 2, 4, 5])

se.remove(2)
print(se)
## set([1, 4, 5])

se.remove(10)
## Traceback (most recent call last):
##   File "test.py", line 21, in 
##     se.remove(10)
## KeyError: 10