ラベル list の投稿を表示しています。 すべての投稿を表示
ラベル list の投稿を表示しています。 すべての投稿を表示

2023年10月9日月曜日

【リスト】リストの最大値・最小値・インデックス取得

 関数max,minによりリスト内要素の最大値、最小値が求められる。またメソッドindexにより最大値、最小値のインデックスを取得できる。


1. max,minによるリスト内要素の最大値、最小値取得

 関数max,minにより、リスト内要素の最大値、最小値が求められる。

x = [3, 67, 1, 8, -5, 22]

max(x)

実行結果

67


x = [3, 67, 1, 8, -5, 22]

min(x)

実行結果

-5


2. indexによるリスト最大値、最小値のインデックス取得

 メソッドindexを用いることで最大値、最小値のインデックスを取得できる。
次の例では最大値67はリストの2番目つまりインデックス1、最小値-5はリストの5番目つまりインデックス4である。

x = [3, 67, 1, 8, -5, 22]

x.index(max(x))

実行結果

1


x = [3, 67, 1, 8, -5, 22]

x.index(min(x))

実行結果

4


3. リファレンス

Python チュートリアル > 3. 形式ばらない Python の紹介 > 3.1.3. リスト型 (list)
Python チュートリアル > 5. データ構造 > 5.1. リスト型についてもう少し
Python 標準ライブラリ > 組み込み関数 > max(iterable, *, key=None)
Python 標準ライブラリ > 組み込み関数 > min(iterable, *, key=None)

使用バージョン:Python 3.10.4

2021年9月21日火曜日

【リスト】二次元リストの行と列の転置

 二次元リストの行と列を直接転置する関数やメソッドはないためリスト内包表記を使うか、*演算子によるリストのアンパックとzipを組み合わせて使う。


1. リスト内包表記による二次元リストの行と列の転置

 二重にしたリスト内包表記で二次元リストの各行の1番目、2番目・・・の要素を取り出してリスト化できる。
[row for row in matrix] は各行への展開で、row[i]としてインデックスがついているので後半の[for i in range(4)]によりrow[1],row[2]・・・つまり各行の1番目,2番目・・・の要素を指定している。

matrix = [[1, 2, 3, 4],
          [5, 6, 7, 8],
          [9, 10, 11, 12]]

print([[row[i] for row in matrix] for i in range(4)])

実行結果

[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]


2. *,zipによる二次元リストの行と列の転置

 *演算子は展開(アンパック)に用いられ、ここでは二次元リストを各行([1, 2, 3, 4] [5, 6, ・・] [7, ・・・・])に展開している。zipは要素の組み合わせを作る(例えば zip('ABCD', 'xy') --> Ax By)ので、*で各行に展開し、zipで各行の要素の組み合わせを作る。
zipはイテレータを返すのでlistでリストに変換するが、zip自体はタプルを返す、つまり(1, 5, 9)といったタプルのリストができるので、さらにリスト内包表記でタプルを一つずつ取り出してlistによりリスト化する。

matrix = [[1, 2, 3, 4],
          [5, 6, 7, 8],
          [9, 10, 11, 12]]

print([list(i) for i in list(zip(*matrix))])

実行結果

[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]


3. リファレンス

Python チュートリアル > 5. データ構造 > 5.1.4. ネストしたリストの内包表記
Python チュートリアル > 4. その他の制御フローツール > 4.7.5. 引数リストのアンパック
Python 標準ライブラリ > 組み込み関数 > zip(*iterables)

使用バージョン:Python 3.8.8

2021年9月20日月曜日

【リスト】多次元リストの一次元リストへの変換

 sumリストの次元をコピーする場合、そのやり方によってコピー元・先のオブジェクトが束縛される場合と別のオブジェクトとなる場合があり注意が必要。代入演算子で複製すると参照渡しとなり同じメモリ領域を参照するためコピー先のオブジェクトがコピー元のオブジェクトの値に影響される。コピー先のオブジェクトをコピー元のオブジェクトとリンクさせたくない場合はcopy()メソッドやcopyモジュールを使う、スライスによりコピーする等が必要となる。


1. sumによる一次元リストへの変換

 要素の合計を求めるsumの書式は以下。要素が数字のリストやタプルなどのイテラブルオブジェクトを左から右にstartに加算する。

sum(iterable, /, start=0)

startに空のリスト[]を設定し、iterableに二次元リストを設定すると空のリストに二次元リストの要素である一次元リストが加えられ、結果として一次元リストに変換される。

a = [[2, 4], [7, 9]]
print(sum(a, []))

実行結果

[2, 4, 7, 9]


 変換元のリストが三次元リストの場合は二次元リストに変換される。

a = [[[2, 4], [7, 9]]]
print(sum(a, []))

実行結果

[[2, 4], [7, 9]]


 三次元リストを一次元リストに変換する場合はsumを二重にすればよい。

a = [[[2, 4], [7, 9]]]
print(sum(sum(a, []), []))

実行結果

[2, 4, 7, 9]


2. itertools.chain.from_iterableによる一次元リストへの変換

 標準ライブラリitertoolsのitertools.chain.from_iterableは一つのイテラブルから連鎖した入力を受け取る。二次元リストを引数に与えると一次元のイテレータを返す。戻り値がイテレータなのでlistでリストに変換する。
itertoolsを使うにはimportが必要。

import itertools

a = [[2, 4], [7, 9]]
print(list(itertools.chain.from_iterable(a)))

実行結果

[2, 4, 7, 9]


 三次元リストを一次元に変換する場合にはsumと同様に処理を二重にすればよい。

import itertools

a = [[[2, 4], [7, 9]]]
print(list(itertools.chain.from_iterable
          (itertools.chain.from_iterable(a))))

実行結果

[2, 4, 7, 9]


3. リファレンス

Python 標準ライブラリ > 組み込み関数 > sum()
Python 標準ライブラリ > itertools --- 効率的なループ実行のためのイテレータ生成関数 > classmethod chain.from_iterable(iterable)

使用バージョン:Python 3.8.8

【リスト】リストのソート

 リストをコピーする場合、そのやり方によってコピー元・先のオブジェクトが束縛される場合と別のオブジェクトとなる場合があり注意が必要。代入演算子で複製すると参照渡しとなり同じメモリ領域を参照するためコピー先のオブジェクトがコピー元のオブジェクトの値に影響される。コピー先のオブジェクトをコピー元のオブジェクトとリンクさせたくない場合はcopy()メソッドやcopyモジュールを使う、スライスによりコピーする等が必要となる。


1. list.sort()による昇順のソート

 リスト型のsortメソッドを用いるとリストがソートされる。デフォルトでは昇順(小さい順)のソートとなる。元のリストそのものがソートされる。

a = [4, 7, 2, 9]
a.sort()
print(a)

実行結果

[2, 4, 7, 9]


2. list.sort()による降順のソート(reverse=True)

 sortメソッドの引数reverse=Trueとすると降順(大きい順)にソートされる。

a = [4, 7, 2, 9]
a.sort(reverse=True)
print(a)

実行結果

[9, 7, 4, 2]


3. list.sort()によるkeyを用いた二次元リストのソート

 二次元リストにおいていずれかの要素によるソートを行う場合は引数keyによりソートに用いる要素を無名関数lambdaとインデックスで指定する。

population = [[1404, '東京'], [528, '北海道'], [146, '沖縄'], [882, '大阪'], ]
population.sort(key=lambda population: population[0])
print(population)

実行結果

[[146, '沖縄'], [528, '北海道'], [882, '大阪'], [1404, '東京']]


4. sorted()による昇順のソート

sorted()関数を用いると元のリストを保持しソートされた新しいリストが生成される。sorted()関数はリストに限らずソートできる。

a = [4, 7, 2, 9]
sorted(a)

実行結果

[2, 4, 7, 9]


sorted()関数では元のリストは変更されない

a = [4, 7, 2, 9]
sorted(a)
a

実行結果

[4, 7, 2, 9]


5. sorted()による降順のソート(reverse=True)

 list.sortメソッド同様にsorted()関数でも引数reverse=Trueとすると降順にソートされる。

a = [4, 7, 2, 9]
print(sorted(a, reverse=True))

実行結果

[9, 7, 4, 2]


6. sorted()によるkeyを用いた二次元リストのソート

 list.sortメソッド同様にsorted()関数でも、二次元リストにおいていずれかの要素によるソートを行う場合は引数keyによりソートに用いる要素を無名関数lambdaとインデックスで指定する。

population = [[1404, '東京'], [528, '北海道'], [146, '沖縄'], [882, '大阪'], ]
print(sorted(population, key=lambda population: 
                                population[0]))

実行結果

[[146, '沖縄'], [528, '北海道'], [882, '大阪'], [1404, '東京']]


7. リファレンス

Python 標準ライブラリ > 組み込み型 > リスト型 (list) > sort(*, key=None, reverse=False)
Python Documentation > Python HOWTO > ソート HOW TO

使用バージョン:Python 3.8.8

2020年7月12日日曜日

【リスト】リストの複製

 リストをコピーする場合、そのやり方によってコピー元・先のオブジェクトが束縛される場合と別のオブジェクトとなる場合があり注意が必要。代入演算子で複製すると参照渡しとなり同じメモリ領域を参照するためコピー先のオブジェクトがコピー元のオブジェクトの値に影響される。コピー先のオブジェクトをコピー元のオブジェクトとリンクさせたくない場合はcopy()メソッドやcopyモジュールを使う、スライスによりコピーする等が必要となる。


1. 代入演算子=によるリストのコピー

 リストを代入演算子で複製すると参照渡しとなり、コピー先のオブジェクトとコピー元のオブジェクトが同じメモリ領域を参照することになる。このためどちらかの値を変更するともう一方の値も変更されてしまう。

代入演算子=によりyにリストxを代入した場合。代入後にxに4をappendするとyにも4がappendされる。idによりオブジェクトのidを確認するとx,yが同じidとなっており同じオブジェクトとして取り扱われていることが分かる。

x = [1, 2, 3]
y = x

print(x, y)

x.append(4)

print(x, y)

print(id(x), id(y))

実行結果

[1, 2, 3] [1, 2, 3]
[1, 2, 3, 4] [1, 2, 3, 4]
1706958004552 1706958004552


2. copyによるリストのコピー

 copyによりコピーするとコピー元、コピー先は別のオブジェクトとなるためお互いに影響を受けない。

x = [1, 2, 3]
y = x.copy()

print(x, y)

x.append(4)

print(x, y)

print(id(x), id(y))

実行結果

[1, 2, 3] [1, 2, 3]
[1, 2, 3, 4] [1, 2, 3]
1706949188168 1706928441736


 ただし、リストが要素としてリストを含む場合、copyによりコピーした場合も要素となっているリストを変更するとコピー先、コピー元両方のリストが影響を受ける。コピーしたリスト自体は参照されていないが、その要素であるリストは参照渡しとなっているためである(浅いコピー)。
リストa, bを要素として持つリストxをcopyでyにコピーし、aに要素を追加した場合。x, yのidは異なりx, yは参照関係に無いが、aは参照が維持されているためx, y両方の要素が変更される。これを避けるためにはcopy.deepcopyにより「深いコピー」を行う必要がある。

a = [1, 2]
b = [3]
x = [a, b]
y = x.copy()

print(x, y)

a.append(4)

print(x, y)

print(id(x), id(y))

実行結果

[[1, 2], [3]] [[1, 2], [3]]
[[1, 2, 4], [3]] [[1, 2, 4], [3]]
1706958007688 1706959483016


3. copy.copyによるリストのコピー

 copy.copyを用いるとcopy同様のコピーができる。 copy.copyを用いるためには標準ライブラリcopyのインポートが必要。

import copy

x = [1, 2, 3]
y = copy.copy(x)

print(x, y)

x.append(4)

print(x, y)

print(id(x), id(y))

実行結果

[1, 2, 3] [1, 2, 3]
[1, 2, 3, 4] [1, 2, 3]
2431241687240 2431241678344


 copy.copyによるコピーは浅いコピーであり要素としてリストを含むリストを複製した際の挙動はcopy()同様。

import copy

a = [1, 2]
b = [3]
x = [a, b]
y = copy.copy(x)

print(x, y)

a.append(4)

print(x, y)

print(id(x), id(y))

実行結果

[[1, 2], [3]] [[1, 2], [3]]
[[1, 2, 4], [3]] [[1, 2, 4], [3]]
2431242299848 2431242300808


4. copy.deepcopyによるリストのコピー(深いコピー)

 リストが要素としてリストを含む場合、copyやcopy.copyでコピーした場合、要素であるリストは参照渡しとなる。コピー先とコピー元をリンクさせたくない場合はcopy.deepcopyにより「深いコピー」を行う。
copy.deepcopyでリストxをリストyにコピーしたのち、xの要素であるリストaに値を追加する。xの要素は変更されるが、yはリンクが切れており要素が変更されない。

import copy

a = [1, 2]
b = [3]
x = [a, b]
y = copy.deepcopy(x)

print(x, y)

a.append(4)

print(x, y)

print(id(x), id(y))

実行結果

[[1, 2], [3]] [[1, 2], [3]]
[[1, 2, 4], [3]] [[1, 2], [3]]
1706959486728 1706948995784


5. スライスによるリストのコピー

 コピー元のリストの要素をスライシングにより取り出してコピー先のリストに代入することが可能。この場合リストを複製するわけではなくオブジェクトに要素を代入する形となるため、コピー元・先のリストはお互いに影響を受けずidも別となる。
リストxの要素をスライシングで取り出しyに代入する場合。xの変更はyに影響しない。

x = [1, 2, 3]
y = x[:]

print(x, y)

x.append(4)

print(x, y)

print(id(x), id(y))

実行結果

[1, 2, 3] [1, 2, 3]
[1, 2, 3, 4] [1, 2, 3]
1523996997256 1523996997448


 copyやcopy.copy同様、要素自体がリストの場合は要素のリストの変更の影響を受ける(浅いコピー)。

a = [1, 2]
b = [3]
x = [a, b]
y = x[:]

print(x, y)

a.append(4)

print(x, y)

print(id(x), id(y))

実行結果

[[1, 2], [3]] [[1, 2], [3]]
[[1, 2, 4], [3]] [[1, 2, 4], [3]]
1524005949064 1523996954952


6. リファレンス

Python 標準ライブラリ > データ型 > copy --- 浅いコピーおよび深いコピー操作

使用バージョン:Python 3.7.0

2020年3月29日日曜日

【リスト】リスト内包表記

 リスト内包表記はリストを示す[]内にfor文を含む式を記述したもの。式の内容に応じたイテラブルオブジェクトが生成される。リスト内包表記を使えば複雑なリストが1行のコードで簡潔に生成できる。


1. リスト内包表記の書式

 リスト内包表記はfor文、rangeと組み合わせて使う。rangeの範囲で値を変化させリストを生成する。
range(6)つまり0から5までのリストを生成する場合。

newlist = [i for i in range(6)]
print(newlist)

実行結果

[0, 1, 2, 3, 4, 5]


 引数として演算を含むことが可能。iを0から5まで変化させ、iの5倍のリストを作る場合。

newlist = [i*5 for i in range(6)]
print(newlist)

実行結果

[0, 5, 10, 15, 20, 25]


 rangeに開始位置、終了位置を指定すると任意の範囲でリストを作ることができる。
iを4から9(10の手前)まで変え、iの5倍をリストにする場合。

newlist = [i*5 for i in range(4, 10)]
print(newlist)

実行結果

[20, 25, 30, 35, 40, 45]


2. 二次元以上の場合

 複数の変数を()で囲みそれぞれに対してrangeで範囲を指定すると二次元以上のリストが生成できる。

newlist = [[x, y, z] for x in range(2) for y in range(2) for z in range(3)]
print(newlist)

実行結果

[[0, 0, 0],
 [0, 0, 1],
 [0, 0, 2],
 [0, 1, 0],
 [0, 1, 1],
 [0, 1, 2],
 [1, 0, 0],
 [1, 0, 1],
 [1, 0, 2],
 [1, 1, 0],
 [1, 1, 1],
 [1, 1, 2]]


範囲はrangeではなくリストで指定してもよい。

newlist = [[x, y, z] for x in [3, 4] for y in [6, 7] for z in [9, 10]]
print(newlist)

実行結果

[[3, 6, 9],
 [3, 6, 10],
 [3, 7, 9],
 [3, 7, 10],
 [4, 6, 9],
 [4, 6, 10],
 [4, 7, 9],
 [4, 7, 10]]


3. 内包表記のネスト

 内包表記の最初の式は任意の式なのでそれを内包表記で書くネストが可能。
最初の内包表記のrangeの範囲を次の内包表記で変化させている。

newlist = [[j for j in range(i)] for i in range(6)]
print(newlist)

実行結果

[[], [0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]


4. if文との組み合わせ

 内包表記をif文と組み合わせることで特定の条件のリストを作成可能
次の例ではiを2で割った余りが0、つまり偶数の場合のみif文がtrueとなりリストに追加される。

newlist = [i for i in range(6) if i % 2 == 0]
print(newlist)

実行結果

[0, 2, 4]


5. リファレンス

Python チュートリアル > 5.1.3. リストの内包表記

使用バージョン:Python 3.7.0

2020年3月23日月曜日

【リスト】リストの値の取得、追加、削除

 リストの任意の位置の値を取得する、リストに値を追加する、リストから値を削除するといったリストの操作について解説する。


1. インデックスによる要素の指定

 要素の順番を指示するインデックスにより任意の要素を取り出すことができる。インデックスは0,1,2…と先頭の要素が0となる。リストの後ろに[]で囲ったインデックスをつけることで指定できる。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
print(fruit[0])

実行結果

りんご


print(['りんご', 'オレンジ', 'イチゴ', 'バナナ'][2])

実行結果

イチゴ


 負のインデックスを指定すると後ろから数えた要素を取り出すことができる。一番最後の要素は-1、最後から2番目は-2となる。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
print(fruit[-1])

実行結果

バナナ


存在しない要素を指定するとエラーとなる。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
print(fruit[4])

実行結果

IndexError: list index out of range


インデックスで指定した要素を書き換えることが可能。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
fruit[2] = 'ぶどう'
print(fruit)

実行結果

['りんご', 'オレンジ', 'ぶどう', 'バナナ']


2. スライスによる要素範囲の指定

 インデックスが一つの要素を指定するのに対してスライスは要素の範囲を指定できる。スライスの書式は[開始位置:終了位置:ステップ]で各項目をインデックスで指定する。インデックスは0,1,2…と先頭の要素が0となる点に注意が必要。

開始位置と終了位置を指定する場合[開始位置:終了位置]の書式となる。終了位置の要素を含まない点に注意が必要。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[4:7]) 

実行結果

[11, 13, 17]


ステップを指定することで間隔をあけて要素を指定できる。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[3:9:2])

実行結果

[7, 13, 19]

開始位置のみ記入した場合そのインデックス以降の要素を指定できる。



prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[6:])

実行結果

[17, 19, 23, 29, 31]


開始位置とステップを指定すると開始位置以降ステップ毎に要素を指定。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[6::2])

実行結果

[17, 23, 31]


終了位置のみを記入した場合には、先頭から終了位置までの要素の指定となる。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[:4])

実行結果

[2, 3, 5, 7]


ステップのみ指定すると全要素からステップ間隔で抽出。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[::2])

実行結果

[2, 5, 11, 17, 23, 31]


マイナスのインデックスを使うとリストの後ろからの位置指定となる。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[-6:])

実行結果

[13, 17, 19, 23, 29, 31]


prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[:-3])

実行結果

[2, 3, 5, 7, 11, 13, 17, 19]


3. リストの結合・要素の追加

 リストに要素を追加する、リスト同士を結合するには+演算子、append、extendを用いる。

+演算子で要素を追加。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
print(fruit + ['大根', '小松菜'])

実行結果

['りんご', 'オレンジ', 'イチゴ', 'バナナ', '大根', '小松菜']


+演算子でリストを結合。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
vegetable = ['大根', '小松菜']
print(fruit + vegetable)

実行結果

['りんご', 'オレンジ', 'イチゴ', 'バナナ', '大根', '小松菜']


appendによる要素の追加。追加する要素を引数に取る。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
fruit.append('ぶどう')
print(fruit)

実行結果

['りんご', 'オレンジ', 'イチゴ', 'バナナ', 'ぶどう']


appendでリストに複数の値を追加しようとして複数の要素を並べて引数に指定するとエラーになる。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
fruit.append('ぶどう', 'メロン')
print(fruit)

実行結果

TypeError: append() takes exactly one argument (2 given)


引数をリストにしてappendすることは可能だが引数が一つの要素として追加されるため、リスト内リストとなる。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
fruit.append(['ぶどう', 'メロン'])
print(fruit)

実行結果

['りんご', 'オレンジ', 'イチゴ', 'バナナ', ['ぶどう', 'メロン']]


extendで引数をリストにすれば複数要素を追加できる。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
fruit.extend(['ぶどう', 'メロン'])
print(fruit)

実行結果

['りんご', 'オレンジ', 'イチゴ', 'バナナ', 'ぶどう', 'メロン']


4. リスト要素の削除

 リストから要素を削除するにはスライスを使うかdel文、pop、removeを用いる。

スライスでリストの一部を指定し元のリストに代入することで指定したインデックス以外の要素を削除したことになる。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
prime_number = prime_number[2:]  
print(prime_number)

実行結果

[5, 7, 11, 13, 17, 19, 23, 29, 31]


prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
prime_number = prime_number[:7]  
print(prime_number)

実行結果

[2, 3, 5, 7, 11, 13, 17]


prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
prime_number = prime_number[2:7]  
print(prime_number)

実行結果

[5, 7, 11, 13, 17]


del文では指定したインデックスの要素が削除される。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
del prime_number[5] 
print(prime_number)

実行結果

[2, 3, 5, 7, 11, 17, 19, 23, 29, 31]


del文ではスライスで削除する範囲を指定できる。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
del prime_number[5:8]  
print(prime_number)

実行結果

[2, 3, 5, 7, 11, 23, 29, 31]


popは指定されたインデックスの要素を削除しその値を取得する。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number.pop(5))

実行結果

13

print(prime_number)

実行結果

[2, 3, 5, 7, 11, 17, 19, 23, 29, 31]


removeは指定した値と同じ値の要素を削除する。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
prime_number.remove(5) 
print(prime_number)

実行結果

[2, 3, 7, 11, 13, 17, 19, 23, 29, 31]


同じ値の要素が複数ある場合、最初の一つが削除される。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ', 'オレンジ', 'イチゴ']
fruit.remove('オレンジ') 
print(fruit)

実行結果

['りんご', 'イチゴ', 'バナナ', 'オレンジ', 'イチゴ']


removeでリストに存在しない値を指定するとエラーになってしまうので注意が必要。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
prime_number.remove(60)
print(prime_number)

実行結果

ValueError: list.remove(x): x not in list


5. リスト要素の検索

 リストに特定の値が含まれているかどうか調べる方法。

countは引数の値がリストに何個含まれるかを調べる。

numbers = [1, 3, 7, 2, 4, 3, 6, 8, 9, 3, 2, 4, 3, 2, 6, 7]
print(numbers.count(2))

実行結果

3


indexメソッドは引数の値がリストのどこにあるかをインデックスで返す。複数の要素がある場合は最初の要素の位置を返す。

numbers = [1, 3, 7, 2, 4, 3, 6, 8, 9, 3, 2, 4, 3, 2, 6, 7]
print(numbers.index(2))

実行結果

3


リストに含まれない値をindexの引数に取るとエラーになるので注意が必要

numbers = [1, 3, 7, 2, 4, 3, 6, 8, 9, 3, 2, 4, 3, 2, 6, 7]
print(numbers.index(5))

実行結果

ValueError: 5 is not in list


リストに値が含まれているかどうかを調べるには値inリストの形で記述する。戻り値はTrue/False。

numbers = [1, 3, 7, 2, 4, 3, 6, 8, 9, 3, 2, 4, 3, 2, 6, 7]
print(2 in numbers)

実行結果

True


numbers = [1, 3, 7, 2, 4, 3, 6, 8, 9, 3, 2, 4, 3, 2, 6, 7]
print(5 in numbers)

実行結果

False


6. リファレンス

Python チュートリアル > 3.1.3. リスト型 (list)
Python チュートリアル > 5.1. リスト型についてもう少し

使用バージョン:Python 3.7.0