MENU

Pythonの配列(リスト)の使い方|基本操作と業務での例

当ページのリンクには広告(PR)が含まれていることがあります。
【Python入門】配列とは?Python(パイソン)で使用する配列の基本から使い方まで解説!のアイキャッチ
お悩み女子

Pythonの配列を調べたのに、出てくるのはリストばかり。配列とリストは同じものなの?

Pythonで「配列」と書かれている場合、たいていはリスト(list)を指します。Excelの1列分の値やCSVの1行分のデータを、順番に並べてまとめて持てるデータの形です。

この記事ではPythonの配列(リスト)の基本操作と、Excelの売上列を集計する使い方を、動くコードつきで紹介します。載せているコードはWindows 11 と Python 3.12 で動くことを確かめています。

この記事でわかること
  • Pythonの配列がリストを指す理由と、arrayモジュール・NumPyとの違い
  • リストの作り方と、要素の取り出し方
  • 追加・変更・削除、繰り返し、並べ替えの書き方
  • つまずきやすい3つの例と直し方
  • Excelの売上列をリストにして集計する実務の例
目次

Pythonのリスト・arrayモジュール・NumPyの違い

他の言語で配列と呼ぶ役割は、Pythonでは主にリストが担います。ただし、Pythonには array モジュールと NumPy の配列もあり、名前が似ているので混同しやすくなります。

スクロールできます
種類中身の型入手向いている場面
リスト(list)混ぜてもよいPython に標準で付属店舗名や行データなど、業務データ全般
array モジュール同じ数値の型だけ標準ライブラリ(import が必要)大量の数値をコンパクトに持つとき
NumPy の配列数値の型をそろえる別にインストールが必要数値計算や統計
お悩み女子

結局、業務で使うのはどれ?

なべくん

ほとんどの場面でリストです。array と NumPy は、数値を大量に扱う必要が出てから考えれば間に合います。

リスト(list)

リストは角括弧 [ ] の中に値を並べて作ります。文字列も数値も混ぜて入れられ、あとから追加や削除もできます。業務で扱う店舗名の一覧やExcelの列は、まずリストで持てば足ります。

arrayモジュール

array は標準ライブラリで、公式ドキュメントでは入れられる値の型が制限された、リストによく似たものと説明されています。型は「型コード」で指定します。整数なら "i" です。

from array import array

amounts = array("i", [120000, 98000, 75000])
amounts.append(50000)
print(amounts)

実行結果は次のとおりです。

array('i', [120000, 98000, 75000, 50000])

整数用の array に文字列を入れようとすると、エラーで止まります。

from array import array

amounts = array("i", [120000, 98000, 75000])
amounts.append("東京")
TypeError: 'str' object cannot be interpreted as an integer

数値だけを大量に持つ場面以外では、リストのほうが扱いやすくなります。

NumPyの配列

NumPy は数値計算用のライブラリで、Python の公式ドキュメントの array の項目でも、別の配列型を定義するパッケージとして紹介されています。標準では入っておらず、pip install numpy のように別に入れます。Excelの集計や文字列の整形が中心の業務なら、最初はリストで十分です。

Pythonのリストの作成と要素の取り出し

リストの作り方と、中身の取り出し方です。位置の数え方は文字列のスライスやrange関数と同じ考え方です。

角括弧で作る

stores = ["東京", "大阪", "名古屋"]
mixed = ["東京", 120000, True]
print(stores, len(stores))
print(mixed)

実行すると、次のように表示されます。

['東京', '大阪', '名古屋'] 3
['東京', 120000, True]

値はカンマで区切ります。len() で要素の数が分かります。2つ目のリストのように型を混ぜることもできますが、同じ種類の値をそろえておくほうが、あとの集計で迷いません。

位置を指定して取り出す

stores = ["東京", "大阪", "名古屋", "福岡"]
print(stores[0])
print(stores[-1])
print(stores[1:3])
print("大阪" in stores)

出力は次のとおりです。

東京
福岡
['大阪', '名古屋']
True

位置は0から数え、[-1] は最後の要素です。[1:3] のスライスは位置1から2までの要素を取り出し、終了の位置3は含みません。in を使うと、値が入っているかを True か False で調べられます。

Excelの行番号は1から、リストの位置は0から始まります。1行目が見出しなら、2行目のデータはリストでは位置0です。行番号とリストの位置を行き来するときは、1ずれる点に注意します。

Pythonのリストの追加・変更・削除|append・extend・remove・pop

リストは作ったあとで中身を変えられます。操作ごとにメソッドが分かれているので、一覧で確かめてから使い方を見ます。

スクロールできます
書き方働き
append(値)末尾に1つ追加する
extend(リスト)末尾に複数の値をまとめて追加する
insert(位置, 値)指定した位置に挿入する
remove(値)指定した値を削除する(最初の1つ)
pop()末尾の要素を取り出して、リストから削除する

要素を追加する

stores = ["東京", "大阪"]
stores.append("名古屋")
stores.extend(["福岡", "札幌"])
stores.insert(0, "本社")
print(stores)

結果は次のとおりです。

['本社', '東京', '大阪', '名古屋', '福岡', '札幌']

append は1つ追加、extend は複数をまとめて追加です。insert の 0 は先頭の位置で、「本社」が先頭に入りました。

append と extend は、リストを渡したときの結果が変わります。

a = ["東京"]
a.append(["大阪", "名古屋"])
print(a)

b = ["東京"]
b.extend(["大阪", "名古屋"])
print(b)

実行すると、次のように表示されます。

['東京', ['大阪', '名古屋']]
['東京', '大阪', '名古屋']

append にリストを渡すと、リストがそのまま1つの要素として入ります。値を1つずつ足したいときは extend です。

変更と削除

stores = ["本社", "東京", "大阪", "名古屋", "福岡", "札幌"]
stores[0] = "本店"
stores.remove("札幌")
last = stores.pop()
print(last, stores)

実行すると、次のように表示されます。

福岡 ['本店', '東京', '大阪', '名古屋']

stores[0] = "本店" のように位置を指定して代入すると、その要素を書き換えられます。remove は値で、pop は末尾から削除します。pop は削除した値を返すので、変数 last で受け取れます。

Pythonのリストの繰り返しと並べ替え|for・sorted・内包表記

リストの中身を1つずつ処理したり、並べ替えたり、条件で絞り込んだりする書き方です。業務で使う集計処理の多くは、この3つで書けます。

forで順に処理する

for文でリストの要素を順に取り出せます。店舗名のリストと売上のリストを組み合わせるときは、zip() で2つを同時に取り出すと便利です。

stores = ["東京", "大阪", "名古屋"]
sales = [120000, 98000, 75000]
for store, amount in zip(stores, sales):
    print(f"{store}: {amount:,}円")

出力は次のとおりです。

東京: 120,000円
大阪: 98,000円
名古屋: 75,000円

並べ替え

並べ替えには sorted() と sort() の2つがあります。

sales = [98000, 120000, 75000]
print(sorted(sales, reverse=True))
print(sales)
sales.sort()
print(sales)

出力は次のとおりです。

[120000, 98000, 75000]
[98000, 120000, 75000]
[75000, 98000, 120000]

sorted は元のリストを変えず、並べ替えた新しいリストを返します。sort は元のリスト自体を並べ替えます。大きい順にしたいときは reverse=True を付けます。

条件で絞り込む内包表記

条件に合う要素だけを集めた新しいリストは1行で作れます。これを内包表記といいます。

sales = [120000, 98000, 75000, 150000]
big = [v for v in sales if v >= 100000]
print(big)

画面には次のように出ます。

[120000, 150000]

for v in sales で順に取り出し、if v >= 100000 に合うものだけを集めています。10万円以上の売上だけを抜き出す、といった絞り込みに使えます。

内包表記は、最初は読みにくく感じるかもしれません。同じ処理を for 文で書けるなら、for 文のままでも問題ありません。

Pythonのリストでつまずきやすい3つの例

リストで困りやすいのはエラーで止まるものと、エラーが出ずに結果がずれるものです。

範囲外の位置でIndexError

要素が3つのリストに、位置5を指定すると止まります。

stores = ["東京", "大阪", "名古屋"]
print(stores[5])
IndexError: list index out of range

list index out of rangeは、「その位置の要素はない」という意味です。位置は0から数えるので、要素が3つなら使えるのは0から2までです。Excelの行を順に処理するときは、len() で数を確かめてから位置を決めます。

代入だけではコピーにならない

a = ["東京", "大阪"]
b = a
b.append("名古屋")
print(a)

c = a.copy()
c.append("福岡")
print(a)
print(c)

結果は次のとおりです。

['東京', '大阪', '名古屋']
['東京', '大阪', '名古屋']
['東京', '大阪', '名古屋', '福岡']

b = a は、リストを複製せず、同じリストに別の名前を付けるだけです。b に追加すると a も変わります。複製したいときは a.copy() を使います。公式チュートリアルでは、copy は浅いコピーを返す、と説明されています。

sortの戻り値はNone

並べ替えた結果を変数に入れ直すときに、よく起きる間違いです。

sales = [98000, 120000, 75000]
sales = sales.sort()
print(sales)

実行すると、次のように表示されます。

None

sort() はリストをその場で並べ替えて、戻り値は None です。公式のソートHOWTOにもsorted との混乱を避けるために None を返す、と書かれています。新しいリストがほしいときは sorted を使います。

3つのうちエラーで止まるのは範囲外だけです。コピーと sort の間違いは、エラーなしで結果だけがずれるので、結果を表示して確かめる習慣が役立ちます。

Pythonのリストの実務例|Excelの売上列を集計する

最後に、Excelの店舗名の列と売上の列をリストに読み込んで、合計・平均・上位3店を出す例です。Excelを Python から操作するライブラリ openpyxl を使います。入っていない場合は、コマンドプロンプトで pip install openpyxl を実行すると入れられます。

列をリストに読み込む

A列に店舗名、B列に売上が5行並んだ「売上一覧.xlsx」を用意しました。1行目は見出しです。

from openpyxl import load_workbook

wb = load_workbook("売上一覧.xlsx")
ws = wb.active

stores = []
sales = []
for row in range(2, ws.max_row + 1):
    stores.append(ws.cell(row=row, column=1).value)
    sales.append(ws.cell(row=row, column=2).value)

print(f"合計: {sum(sales):,}円")
print(f"平均: {sum(sales) / len(sales):,.0f}円")

ranking = sorted(zip(sales, stores), reverse=True)
for amount, store in ranking[:3]:
    print(f"{store}: {amount:,}円")

実行すると、次のように表示されます。

合計: 409,000円
平均: 81,800円
東京: 120,000円
大阪: 98,000円
名古屋: 75,000円

2行目から最終行まで1行ずつ読み、append で2つのリストに足しています。ws.max_row は、データが入っている最後の行の番号です。

合計・平均・上位を出す

sum() はリストの合計、len() は件数なので、割れば平均です。上位3店はzip(sales, stores) で「売上と店舗名の組」を作り、sorted(..., reverse=True) で売上の大きい順に並べて、先頭の3つを取り出しています。

売上を先に書いた組にしているので、売上の順で並びます。店舗名を先にすると、店舗名の順になってしまいます。

空のセルの値は None になり、sum() に混ざると TypeError で止まります。空のセルがありそうな列では、読み込むときに None を飛ばす処理を入れてください。

Pythonの配列に関するよくある質問

重複の削除、行と列の表し方、NumPyの導入についての疑問をまとめました。

重複した値を取り除くには?

list(dict.fromkeys(names)) と書くと、重複を消して最初に出た順番を保てます。たとえば ["東京", "大阪", "東京", "名古屋", "大阪"] は ['東京', '大阪', '名古屋'] になります。

Excelのような表(行と列)はどう表しますか?

リストの中にリストを入れる「2次元リスト」で表せます。rows = [["東京", 120000], ["大阪", 98000]] なら、rows[0][1] は 120000 です。行数や列数が増えて扱いにくくなったら、pandas のようなライブラリを検討します。

NumPyは入れておいたほうがよいですか?

Excelの集計や文字列の整形が中心なら、リストと標準ライブラリで足りる場面が多くあります。数値計算や統計が必要になってから、別にインストールして使います。

Pythonの配列とリストの要点

配列(リスト)のポイントを整理します。

この記事のまとめ

配列とは:多くの場合リストのこと。array は型が限られ、NumPy は別にインストールが必要。
基本操作:作る・取り出す・append で追加・remove と pop で削除。位置は0から数える。
繰り返しと並べ替え:for で順に処理、sorted で新しいリスト、内包表記で絞り込み。
つまずきやすい点:範囲外の位置は IndexError。b = a は複製ではない。sort() の戻り値は None。
業務での使いどころ:Excelの列をリストに読み込み、sum・len・sorted で集計する。

まずは手元のExcelの列を1つ選んでリストに読み込み、合計を出すところから始めてみてください。

リストと一緒に使うことの多い処理は、次の記事でも扱っています。

参考資料
リスト型についてもう少し | Python チュートリアル
リスト | Python 3 ドキュメント
array — 効率的な数値配列 | Python 3 ドキュメント
ソート HOWTO | Python 3 ドキュメント
NumPy ドキュメント
openpyxl ドキュメント

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次