2022/05/24

Python list まとめ【初期化編】

 

基本的な初期化 

一般的(だと思う)基本的なリストの生成


一般的な初期化

型の宣言とかしなくても,(変数名) = [] だけで空リストが生成できる.
list_sample = []
print(list_sample)
>>[]


要素を指定して初期化

生成時に好きなオブジェクトを持たせることができる.
list_sample = [1, 'c', 2+3, "xyz", 777]
print(list_sample)
>>[1, 'c', 5, 'xyz', 777]


要素数を指定して初期化

[ A ] * n
* を用いることで n個 の 要素A で埋められたのlistが生成できる.

これを使えば要素数を指定してlistを初期化できる
list_sample = [0]*5
print(list_sample)
>>[0, 0, 0, 0, 0]
list_sample[1] = 'a'
print(list_sample)
>>[0, 'a', 0, 0, 0]
ちなみに空だと失敗する.どうしても空が良い場合はNoneを使おう
list_sample = []*5
print(list_sample)
>>[0]

list_sample = [None]*5
print(list_sample)
>>[None, None, None, None, None]


多次元リストを初期化

リストの中に別のリストをオブジェクトとして持たせることで多次元リストになる. 2次元リストなら (変数名) = [[]] ,3次元リストなら (変数名) = [[]] 
list_sample = [[]]
print(list_sample)
>>[[]]


要素を指定して多次元リストを初期化

リストの中に別のリストをオブジェクトとして持たせることで多次元リストになる. 
list_sample = [[1, 'c', 2+3, "xyz", 777], ['a', 'b', 'c'], 2, 3, 'abc']
print(list_sample)
>>[[1, 'c', 5, 'xyz', 777], ['a', 'b', 'c'], 2, 3, 'abc']


要素数を指定して多次元リストを初期化

[ [0] * n ] * m
これで n * m の配列が生成できてそうである.

が,コピーなので1つの変更が全てに反映される.
list_sample = [ [0] * 3 ]*5
print(list_sample)
>>[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

list_sample[0][1] = 'a'
print(list_sample)
>>[[0, 'a', 0], [0, 'a', 0], [0, 'a', 0], [0, 'a', 0], [0, 'a', 0]]
内包表現を使えば,解決できる
list_sample = [[0]*3 for i in range(5)]
print(list_sample)
>>[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

list_sample[0][1] = 'a'
print(list_sample)
[[0, 'a', 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]


数列 

各要素が数列となっているリストの生成


自然数のみの数列

1, 2, 3, 4, ... を生成.
range関数を使えば連続した数値を生成できるのでそれを利用します.
list_sample = [i for i in range(10)]
print(list_sample)
>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


奇数のみの数列

1, 3, 5, 7, ... を生成.
range関数を応用
list_sample = [i*2+1 for i in range(10)]
print(list_sample)
>>[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]


等差数列

10, 11, 12, 13, 14, ... ,19 を生成.
list_sample = [i for i in range(10, 20)]
print(list_sample)
>>[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
10, 13, 16, 19, 22, ... ,49 を生成.
list_sample = [i for i in range(10, 50, 3)]
print(list_sample)
>>[10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49]


等比数列

初項3, 公比2 (3, 6, 12, 24, ...) の数列を生成.
list_sample = [3*(2**i) for i in range(10)]
print(list_sample)
>>[3, 6, 12, 24, 48, 96, 192, 384, 768, 1536]


応用


素数のみからなるリスト

素数のみからなる数列を生成.内包表現にifを組合わせることで実装可能
import math
def isPrimeNumber(n):
    if n < 2: return False
    for k in range(2, int(math.sqrt(n)) + 1):
        if n % k == 0: return False
    return True
    
list_sample = [i for i in range(20) if isPrimeNumber(i)]
print(list_sample)
>>[1, 4, 7, 10, 13, 16, 19] 


条件で値が変更される数列

偶数は正の値に,奇数は負の値となる数列
list_sample = [i if i%2 == 0 else -i for i in range(10)]
print(list_sample)
>>[0, -1, 2, -3, 4, -5, 6, -7, 8, -9]


行列

行列を多次元リストで表現します.
n=3
m=4
list_sample = [[1 + i*n + j for j in range(n)] for i in range(m)]
print(list_sample)
>>[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]

0 件のコメント:

コメントを投稿