CodeGym /Java Course /Python SELF JA /リスト生成

リスト生成

Python SELF JA
レベル 7 , レッスン 7
使用可能

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)]
        
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION