2022/05/24

Python list まとめ 【アクセス編】

 

インデックス

一般的(だと思う)基本的なリストの要素へのアクセス


i 番目の要素にアクセスする

インデックスを使って i 番目の要素にアクセスする
list_sample = [2, 9, 3, 7, 4, 1, 0, 6, 8, 5]
print(list_sample[0])
>>2
print(list_sample[1])
>>9
print(list_sample[2])
>>3


後ろから i 番目の要素にアクセスする

インデックスに負の値を使うと末尾からアクセスできる
list_sample = [2, 9, 3, 7, 4, 1, 0, 6, 8, 5]
print(list_sample[-1])
>>5
print(list_sample[-2])
>>8
print(list_sample[-3])
>>6


スライス

範囲指定してリストの一部を切り取れます.
list_sample[ A:B:C ]
上の例ではA番目からB番目までの要素についてC個おきに取り出す


スライスを使用して,好きな範囲・順番で取り出す

4番目から19番目までの要素について2個おきに取り出す場合
list_sample = [4,2,8,  5,3,6,1,0,7,9,8,2,6,1,9,5,4,7,  3,0]
tmp = list_sample[3:18:2]
print(tmp)
>>[5, 6, 0, 9, 2, 1, 5, 7]
ただし,色々省略して書くことも可能.
未記入の場合はAが先頭,Bが末尾,Cが1となります.


先頭から i 番目までの要素を取り出す

省略場合の実行例
list_sample = [4,2,8,5,3,6,1,0,7,9]
tmp = list_sample[:5]
print(tmp)
>>[4, 2, 8, 5, 3]


末尾から i 番目までの要素を取り出す

インデックスには上で登場した負の値も使用できます.
list_sample = [4,2,8,5,3,6,1,0,7,9]
tmp = list_sample[:-3]
print(tmp)
>>[4, 2, 8, 5, 3, 6, 1]


奇数番目・偶数番目のデータのみ取り出す

スライスを使用すれば簡単に実装できます.
list_sample = [4,2,8,5,3,6,1,0,7,9]
even = list_sample[1::2]
print(even)
>>[2, 5, 6, 0, 9]
odd = list_sample[::2]
print(odd)
>>[4, 8, 3, 1, 7]


逆順で要素を取り出す

Cの部分に負の値を使用することで,逆順に要素を取り出せます. 
list_sample =[4,2,8,5,3,6,1,0,7,9]
tmp = list_sample[::-1]
print(tmp)
>>[9, 7, 0, 1, 6, 3, 5, 8, 2, 4]


for文を使ってデータにアクセスする

for文を使うことで1個づつデータを取り出すことが出来るようになります.

一個づつ参照する

シンプルなリストの要素へのアクセス
list_sample = [4,2,8,5,3]
for i in list_sample:
    print(i)
>>4
>>2
>>8
>>5
>>3

別の実装
list_sample = [4,2,8,5,3]
for i in range(len(list_sample)):
    print(list_sample[i])
>>4
>>2
>>8
>>5
>>3


リストの要素へ逆順にアクセス

実装は色々あるけど,スライスを使うのが一番シンプル
list_sample = [4,2,8,5,3]
for i in list_sample[::-1]:
    print(i)
>>3
>>5
>>8
>>2
>>4


リストの要素とインデックスを同時に取得

enumerate関数を使えば要素とインデックスを同時に取得できます.
list_sample = [4,2,8,5,3]
for index, val in enumerate(list_sample):
    print(str(index) + "番目の値:" + str(val))
>>0番目の値:4
>>1番目の値:2
>>2番目の値:8
>>3番目の値:5
>>4番目の値:3


複数のリストを同時に取得

zip関数を使えば複数のリストの要素を同時に取得できる
list_sample_A = ['国語','理科','社会','数学','英語']
list_sample__B = [62, 92, 51, 99, 67]
for index, val in zip(list_sample_A, list_sample__B):
    print(str(index) + "の点数は" + str(val) + "点でした.")
>>国語の点数は62点でした.
>>理科の点数は92点でした.
>>社会の点数は51点でした.
>>数学の点数は99点でした.
>>英語の点数は67点でした.


内容物の検索

インデックスではなく,要素を使って探索します.


要素Xが存在しているか調べる

in を使用してリスト内に要素Xが存在するか調べます.
list_sample = [4,2,8,5,3,6,1,0,7,9]
if 3 in list_sample:
    print('Yes')
else:
    print('No')
>>Yes


要素Xの個数を調べる

リスト内に要素Xが何個存在するか調べます.
list_sample = [4,2,8,5,3,6,1,0,7,9,8,2,6,1,9,5,4,7,3,0]
tmp = list_sample.count(2)
print(tmp)
>>2


要素Xの位置を調べる

要素Xが最初に登場する位置のインデックスを返します.リストに含まれていない値を指定するとエラーを吐きます.
list_sample = [4,2,8,5,3,6,1,0,7,9,8,2,6,1,9,5,4,7,3,0]
tmp = list_sample.index(5)
print(tmp)
>>3

tmp = list_sample.index(100)
print(tmp)
>>ValueError: 100 is not in list
要素Xが最初に登場する全ての位置のインデックスが欲しい場合.
list_sample = [4,2,8,5,3,6,1,0,7,9,8,2,6,1,9,5,4,7,3,0]
tmp = [i for i, x in enumerate(list_sample) if x == 3]
print(tmp)
>>[4, 11, 18]

0 件のコメント:

コメントを投稿