はじめに
「徹底攻略Python 3 エンジニア認定[基礎試験]問題集」の復習として記載しています。
リストの操作
data = [1, 2, 3, 4]
print(data[:2], data[3:])
# [1, 2] [4]
● 解説
リストのスライスに関する問題。
リストのスライス範囲は、「開始位置:終了位置」のように記述します。
開始位置を省略すると先頭からになり、終了位置を省略すると末尾までになります。
最初の引数の data[:2]は、インデックス0から1の要素(2未満)が取得されます。
結果として [1, 2] が表示されます。
2つ目の引数の data[3:]は、リスト data のインデックス3から最後の要素までを
スライスしています。コロンの後に何も指定しない場合、スライスはリストの末尾まで続きます。
インデックス3から最後の要素までが取得されます。結果として、 [4] が表示されます。
data = [1, 2]
data.append(3)
print(data)
# [1, 2, 3]
● 解説
リストの末尾に値を追加するには、append()メソッドを使います。
このようにドット「.」を使って書く関数をメソッドといいます。
書式 リストに要素を追加する①
リスト名.append(値)
書式 リストに要素を追加する②
リスト名 += 「値」
下記の記述は正しいか
[[1, 2, 3, 4]]の長さは4である
# 誤り。長さは1である。
● 解説
リストの入れ子に関する問題です。
リストの要素として「別のリスト」を持つことを入れ子にするといいます。
リストの入れ子はネストと呼ばれることもあります。
[例]ネストの作成①
[[1, 2], [3, 4]]
[例]ネストの作成②
[[1, 2, 3, 4]]
stack = [1, 2, 3, 4]
data = []
while stack:
data.append(stack.pop())
print(data)
# [4, 3, 2, 1]
● 解説
リストをスタックとして使う方法についての問題です。
スタックは、複数の値を扱えるデータ構造の一つです。リストと異なるのは、
「要素を挿入すると末尾に追加され、取り出すときも末尾から削除される」という点です。
stack.pop()はstackの最後の要素を削除し、data.append()はその要素をdataに追加します。
data = [1, 2]
data.append(3)
data.pop(0)
print(data)
# [2, 3]
● 解説
リストをキューとして使う方法についての問題です。
キューは、複数の値を扱えるデータ構造の一つです。リストと異なるのは、
「要素を挿入すると末尾に追加され、取り出すときは先頭から削除される」という点です。
リストをキューとして扱うには、append()とpop()の2つを使用します。
append(要素)で末尾に要素を追加し、pop(0)で先頭を削除します。
data = []
for i in [1, 2, 3]:
for j in [1, 2]:
if i != j:
data.append((i, j))
print(data)
# [(1, 2), (2, 1), (3, 1), (3, 2)]
● 処理の流れ
-
最初に、空のリスト data が作成されます。
-
次に、外側の for ループが i の値を [1, 2, 3] の順に取ります。
内側の for ループが j の値を [1, 2] の順に取ります。 -
内側のループ内で、if 文が実行されます。
この条件式は、i と j が等しくない場合に True となります。
つまり、i と j が異なる値の組み合わせの場合に True となります。 -
条件が満たされると、(i, j) というタプルが作成され、
data リストに append() メソッドを使用して追加されます。 -
最後に、print(data) 文が実行され、data リストが表示されます。
したがって、このコードは、1 から 3 までの数値と 1 から 2 までの数値の組み合わせを生成し、
それぞれの組み合わせを data リストに追加します。
ただし、i と j の値が等しくない組み合わせのみが追加されます。
※リスト内包表記だと下記のようになる
print([(i, j) for i in [1, 2, 3] for j in [1, 2] if i != j])
# [(1, 2), (2, 1), (3, 1), (3, 2)]