7.1 掛け算
Pythonには、要素の数を増やす便利な構文があるよ!そのためには、シンプルな掛け算演算子を使うんだ。
文字列の生成
これを文字列に適用することもできるよ:
print("ママ" * 5) # マママママママママが出力される
また、例えばすぐに区切り用の文字列を出力したい場合にも使えるよ:
print("-" * 40) # ----------------------------------------が出力される
リストの生成
それからリストの要素数を増やすこともできるよ:
print(["apple"] * 5) # ['apple', 'apple', 'apple', 'apple', 'apple']が出力される
この演算子にはもっと実用的な使い道もあるよ。例えば、10個の要素で、すべてがゼロのリストを作りたい場合は:
alist = [0] * 10
print(alist) # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]が出力される
さらには2次元配列を作ることもできる。例えば、20x10のゼロで埋められた配列を作るのは簡単:
alist = [[0] * 10] * 20
print(alist) # [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ...]が出力される
便利だよね?
7.2 List Comprehension
Pythonには「List Comprehension」っていう便利な機能があるんだ。それはリストを作る短くて簡潔な方法だよ。イテラブルなオブジェクトの各要素に式を適用して、新しいリストを一行で生成できるんだ。
文章で説明するより、見せたほうが早いね。この機能はこんな感じだよ:
[式 for 変数 in シーケンス]
ここで:
-
変数
— 任意の変数名 -
シーケンス
— 変数が取る値の集合(これはリスト、文字列、またはrange
関数で生成されたオブジェクトなどが使えるよ) -
式
— 通常、この生成器で使用される変数に依存する式で、リストの要素を埋めるためのもの
重要!
全体の式は角括弧で囲む必要があるよ。
以下は生成器のいくつかの使用例だよ:
n 個のゼロで構成されたリストを作りたかったら、生成器を使ってこうやる:
alist = [0 for i in range(100)]
整数の二乗で埋められたリストを作りたい場合:
n = 5
alist = [i ** 2 for i in range(n)]
整数 1 から n までで埋められたリストを作りたい場合:
n = 10
alist = [i + 1 for i in range(n)]
また、ランダムな数値で埋める場合もできるよ(random
モジュールの randrange()
関数を使って):
from random import randrange
n = 10
alist = [randrange(1, 10) for i in range(n)]
7.3 List Comprehensionでループ
List Comprehensionはリスト生成だけじゃなくて、基本的にはforループを簡潔に書きたい場合にも使えるよ。
例えば、リスト内の特定の値を画面に出力したい場合:
alist = ["apple", "banana", "cherry"]
[print(x) for x in alist]
もしくは、キーボードから値を入力したい場合もできるよ:
a = [input() for i in range(int(input()))]
この例ではリストは標準入力から取得した文字列で構成される: 最初にリストの要素数を入力して (その値がrange
関数の引数になる)、次に指定された数の文字列を入力するんだ。
通常の形でこのコードはこんな感じになるよ:
n = int(input())
a = []
for i in range(n):
x = input()
a.append(x)
List Comprehensionって、いろんなことができて面白いよね:
条件を使う:
式に条件を含めることで要素をフィルタリングできるよ。例えば、偶数だけのリストを作りたい場合:
[x for x in range(10) if x % 2 == 0]
ネストされたループ:
ネストしたループも使用できるよ。例えば、多次元配列を作りたい場合:
[(x, y) for x in range(3) for y in range(3)]
GO TO FULL VERSION