リスト

リスト(list)は、複数の要素を格納することができるコンテナ型のオブジェクトで、順序付けされ連続したデータを扱う場合に使用します。予め準備された既存の関数を使い、要素の追加、削除、検索など、様々な操作を行うことができます。ここでは、リストの基本的な概念と使い方のみを確認します。

リストの作成

リストは[   ]で表されます。空のリストは以下のように作成します。

l = []

要素を含めて初期化を行うことができます。たとえば、 3つの整数1, 2, 3がこの順番で含まれるリストは、以下のように作成します。

l = [1, 2, 3]

リストの内容を表示したい場合は、print関数に直接渡すことができます。

l = [1, 2, 3]
print(l) # [1, 2, 3] が出力される

リストの要素へのアクセス

リストの各要素にアクセスするためには、リストの名前の後に[要素の番号]を指定します。要素の番号は添え字と呼ばれ、0から始まる整数です。たとえば、以下のプログラムはリストを作成し、各要素にアクセスするプログラムです。

a = [1, 2, 0]
a[2] = a[0] + a[1]  # 0番目の要素と1番目の要素の和を2番目の要素へ代入する
print(a)            # [1, 2, 3] と出力される

複数の値の入力

input関数は、標準入力から「1行」の「文字列」を入力します。従って、複数の数値を1行で読み込み、変数に記録するためには、いくつかの手順を踏む必要があります。様々な方法がありますが、ここではリストを用いた方法を解説します。

まず、input関数によって読み込んだ空白区切りの文字列を複数の文字列に分割し、リストに保存します。分割は文字列 クラスの関数である split() を使用します。 split() 関数は、その名前の通り文字列を指定された区切り文字単位で分割し、リストで返却する関数です。

たとえば、"3 5" の様に二つの整数を空白区切りで標準入力することを考えます。

l = input()
print(l) # 3 5 と出力される

このプログラムは、 変数lに文字列 "3 5" が格納され、数値の列として扱うことができません。 そこで、 まずinput関数で得られた文字列に対してsplit() 関数を適用し、分割された文字列要素でリストを作成します。

l = input().split()
print(l) # ['3', '5'] と出力される

この様に、空白区切りの文字列をそれぞれリストの要素に分割することができます。 区切り文字を別の文字にしたい場合は、 以下のようにsplit() 関数の引数に区切り文字にしたい文字列を与えます。

s.split(',') # 文字列 s を , (カンマ) 区切りで分割
s.split(':') # 文字列 s を : (コロン) 区切りで分割
s.split(' ') # s.split() と同様

次に、 リストの各要素を整数として扱うために、各要素をキャスト(型変換)します。たとえば、1行から二つの整数を読み込み、それらの和を出力プログラムは以下のように書くことができます。

l = input().split()
a = int(l[0])
b = int(l[1])
print(a+b)

x = int(s)は文字列のsを整数に変換してxに代入します。

多重代入

Pythonでは、代入文の左辺と右辺に、対応する複数の変数や式を指定する、多重代入を行うことができます。たとえば、以下のプログラムは1行に入力された2つの文字列をスワップして出力します。

a,b = input().split() # Hello World と入力する
a,b = b,a
print(a, b)           # World Hello と出力される

このプログラムでは、input関数からの文字列を空白区切りで分割し、得られた要素でリストを作成し、(要素数が2つと仮定し)各要素を順番に変数a, bに記録しています。さらに、a,b = b,aによって、スワップしています。

map関数

マップとは、リストのようなオブジェクトに含まれる各要素に対して、統一された変換処理を施し、別のオブジェクトを生成する操作で、Pythonではmap関数を用いて行うことができます。

map関数は以下のような書式で、第一引数に関数、第二引数にシーケンス(リスト)を指定します。

map(function, sequence)

ここでは、リストの全ての要素に対して型変換を行うプログラムを考えます。次のプログラムは、文字列要素を含むリストに対して、全ての要素を整数に変換します。

l = ["1", "2", "3"]       # 3つの文字列要素
print(l[0] + l[1] + l[2]) # 123 (文字列として計算される)
l = list(map(int, l))
print(l[0] + l[1] + l[2]) # 6 (整数として計算される)

ここで、map関数の返す値は list 型ではなく iterator 型となるため、リストとして取得したい場合は list() 関数を使って変換する必要があります。

mapを利用した複数要素の入力

「空白区切りで二つの整数を標準入力で受け取り、それぞれの値を別の変数に代入する。」といった処理は、以下のように記述することができます。

l = input()
a,b = list(map(int, l.split()))

または

l = input()
a,b = map(int, l.split())

Reference

 

オンラインジャッジではじめるC/C++プログラミング入門 (マイナビ)

AIZU ONLINE JUDGE のコース問題を題材にした解説書です。各トピックごとに C/C++ 言語の基礎的な内容を学習し、Introduction to Programming の演習問題にチャレンジしていきます。内容は敷居の高いものではなく、プログラミング初学者が取り組む例題からスタートしています。