paiza times

paizaがお届けする、テック・キャリア・マネジメント領域における「今必要な情報」を届けるWebメディア

logo

paizaがお届けする、テック・キャリア・マネジメント領域の「今必要な情報」を届けるWebメディア

Pythonのリストをマスターする!基礎から多次元リストまで徹底解説

f:id:paiza:20210618011415j:plain
f:id:paiza:20180910132940p:plainこんにちは。倉内です。

プログラミング学習を始めたばかりの方が最初に難しいと感じるポイントが「リスト(配列)」ではないでしょうか。

なんとなく分かったつもりでいざデータをリストで扱おうとすると、処理がうまく書けなかったり思い通りの動きをさせられなかったり…もちろん検索すればサンプルコード等はたくさん出てきますが、基本的な概念をしっかり理解しておけば応用も利きますし、この先の学習もスムーズに取り組めます。

そこで今回は、paizaラーニングで無料公開中の動画講座「Python3入門編」と解答例つき練習問題集を利用して、プログラミング初学者の方にリストを基本から解説したいと思います!

また、ただいま指定のプログラミング問題に挑戦すると、抽選でAmazonギフト券がもらえるキャンペーンも実施中です。リスト処理をマスターしてぜひチャレンジしてみてください!キャンペーン詳細はこちら

20210617175456

前置き:利用教材について

paizaラーニングは、Webブラウザとインターネット環境があればどなたでもご利用いただけます。

動画はプロの声優さんによる解説つきで、学習した内容をすぐ演習課題で復習できるのが特徴です。

20201104232407

練習問題として利用するのは、さまざまな難易度・内容のプログラミング問題を集めた「レベルアップ問題集」です。

問題を解いたあとコードをテストするための全入力ケースが閲覧でき、一部問題は解答コード・解説もついています*1

以降はサンプルコードも提示しますので、よければオンライン実行環境のpaiza.IOで自分で試しながら進めてみてください。

リストとは何かを学ぼう

リストの概念

リストとは、まとまったデータを便利に扱うことができるデータ構造のことです。インデックスと呼ばれる番号で、それぞれのデータを区別します。

言葉で説明してもちょっと分かりづらいので、図で見てみましょう。

20210617204342

データが並んでいる箱に入っているという感じでイメージすると分かりやすいと思います。ひとつひとつのデータのことを「要素」と言ったりします。

リストには整数、浮動小数点数、文字列など任意の型のデータが格納できます。要素には順序があり、インデックスを用いて要素を指定して取り出すことができます。また、リストの要素は変更が可能です。

なお、他のプログラミング言語では「配列」と呼ばれる機能が、Pythonでは「リスト」という名前で提供されています。「配列」と表記して説明している教材もありますが、paizaラーニングでは「リスト」としています。

リストの具体例

ではもう少し具体的な値で見てみましょう。

下図は、teamというリストにインデックス0の要素として“勇者”、インデックス1の要素として“魔法使い”が格納されている状態を示しています。

20210617205140

インデックス0の“勇者”を標準出力したい場合、

print(team[0])

で求めることができます。

また、さきほど述べたとおり一度格納したデータは変更や削除が可能です。

20210617204759

コードについては、リストの作り方やデータの格納の仕方、データの更新・削除の仕方などを含めて以降で詳しく説明します。

リストのつかいどころ

リストが何なのかは分かったかと思いますが、いったいどういったところでその便利さを発揮するのでしょうか。

ほんの一例ではありますが、以下のようなものがあります。

20210617212511

リストは並び順が管理できるため出席番号やRPGのパーティーの順番といった単純なものから、ゲームデータなど並び順の保持が重要な意味を持つ場面でもよく利用されています。

もう少し複雑なことももちろん可能です。たとえば、Pythonの数値計算のためのライブラリであるNumpyでは多次元配列「ndarray」というクラスがあります。また、「arange」では、等差数列を配列として生成します。(ちょっと難しいかもしれませんが、現時点ではそういうこともできるんだ~くらいに思っていただければと思います)

そのためデータサイエンスや機械学習、スクレイピングなどの分野でもリストは欠かせない機能となっています。

ここまでの内容は音声つきの動画講座で学ぶことができますのでぜひごらんください。

20210617214509

リストの基本操作を学ぼう

ここからは実際にコードを書きながらリストの理解を深めましょう。

以降はPythonの基本的な書き方や変数については習得していることを前提として進めていきます。もしPythonを初めて学習するという方は「Python3入門講座」をレッスン1から受講していただくとよいかと思います。

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

さきほど見たリストの具体例をコーディングしてみることにします。

teamというリストに“勇者”と“魔法使い”を格納していましたよね。

teamリストをprint関数で出力すると2つの要素が取り出されます。また、インデックス0と1を指定してprint関数で出力すると、“勇者”と“魔法使い”が表示されます。

さらに要素が何個格納されているかをlen関数を使って取得することもできます。ぜひ上のエディタで実行して実際に確認してみてください。

Pythonのリストはかなり直感的で理解しやすいため他の言語より比較的扱いやすいと思います。

リストの要素を更新する

リストの要素に対して追加・修正・削除といった操作が可能です。

さきほどのteamリストに対して操作してみましょう。

要素の追加はappend関数、削除はpop関数を使います。削除したい要素のインデックスが分からないときや値を指定して削除したいときはremove関数。

リストの要素の修正は、変数と同じように代入すればよいですね。

ループ処理でリストを操作する

for文とリストを組み合わせた処理は、プログラミング問題を解く際にもよく使います。

例として、さきほどインデックスを指定しておこなった要素の取り出しをループ処理で書き換えてみたいと思います。

リスト内に要素が何個あるか、どこにどの値が入っているかなどを意識しなくてもループ処理を使うとこのように要素を取り出すことができます。

ちなみにループ処理を復習しておきたいという方は、以下の講座をご活用ください。

20210618184555

ここまででリストの基本は身についたかと思います。演習問題を含めて、講座「Python入門編4: リストの基礎」でより詳しく解説していますのでそちらも参考にしてみてください。

多次元リストを理解しよう

ここからは少し難易度をアップして、多次元リストについて学びましょう。今回は2次元リストと3次元リストを扱います。

2次元リスト

2次元リストとは、2つのインデックスで要素を指定するリストのことです。リストにリストを組み合わせて作成し、インデックスを2つ指定してデータを参照します。

下の図を見ていただくとイメージしやすいと思います。オセロや将棋など盤面ゲームでは欠かせない概念です。

20210618190101

他には写真やイラストなどのイメージ画像も2次元リストで表すことができます。画像処理に興味がある方は理解しておくとよいでしょう。paizaにも「Python×AI・機械学習入門編」という講座があり、ここでは機械学習の入力として画像のデータを扱っています。

20210618190907

次は実際に2次元リストを操作してみましょう。

作成はさきほどやった単純なリストの場合とあまり変わりません。リストにリストを入れたものが2次元リストとなります。

取り出すときはインデックスをふたつ指定することができます。

3次元リスト

3次元リストは縦・横・高さのデータを持つため3D空間の座標を表すときなどに用いられます。

基本的には2次元リストをさらにリストに入れたもので、リストの作成や要素の取り出し自体はそれほど難しくありません。

ここでは複数のドット絵を表示するサンプルコードを見てみましょう。

要素の取り出しはループ処理を使っています。

多次元リストに対する要素の追加・削除などの操作は講座「Python入門編6: 多次元リストを理解しよう」で詳しく解説しています。演習問題もありますのでぜひチャレンジしてみてください。

リストを使って問題を解いてみよう

学習した内容を使って、レベルアップ問題集の「配列活用メニュー」から1問、paizaが公開しているプログラミングゲームから1問ピックアップして解いてみることにします。

全ての要素の和(Dランク相当)

問題文:

配列 A の要素数 N と配列 A の各要素 A_1, A_2, ..., A_N が整数として与えられるので、配列 A の全ての要素の和を求めてください。

入力される値:

N
A_1
...
A_N

期待する出力:

配列 A の全ての要素の和を 1 行で出力してください。
また、出力の末尾には改行を入れてください。

条件:

  • 1 ≦ N ≦ 100
  • 0 ≦ A_i ≦ 100 (1 ≦ i ≦ N)

考えていくにあたって、例として入力値を以下のとおりとします。

5
1
2
3
4
5

まず、標準入力からデータを読み込む処理が必要です。

複数行のデータをリストに格納する処理については、こちらの講座で解説していますので参考にしてください。

# 何行データが渡されるか
N = int(input())

# N行分の値をリストに格納
num_list = []
for l in range(N):
    num_list.append(int(input()))

# リストの要素を出力    
print(num_list)

num_listリストに格納したデータをprint関数で出力してみると…

[1, 2, 3, 4, 5]

うまく値の取得ができていますね!

それではあとは要素をすべて足していきましょう。ここでもfor文を使って処理します。

sum_result = 0
for i in num_list:
    sum_result += i

print(sum_result)

答えは

20

となりました。

不要なコードを削除して、練習問題の画面から提出してみると無事100点を取れました!

今回はやや冗長なコードの書き方をしているのでもっとよい他の書き方ももちろんあります。問題集では解答例コードと解説が参照可能ですのでぜひごらんください。

魔法陣(Bランク相当)

最後に少しレベルの高い問題を解説した記事もご紹介します。ここまでの内容が「簡単だった!」「もっと難しい問題にもチャレンジしたい!」という方はぜひ挑戦してみてください。

paiza.hatenablog.com

さきほど解いた問題はpaizaスキルチェックのDランクに相当する問題でした。この記事で取り上げている問題は、異世界ファンタジーの舞台でプログラミング学習ができる『ロジックサマナー』にあるBランク相当の問題となります。

このゲームではプログラミング問題を「封印」、プログラミングを「召喚魔法」といい、ITエンジニアのあなたは伝説の召喚士として問題を解いて世界を救う使命を負っています。ぜひ一緒に封印を解いていきましょう。

このようにpaizaでは難易度がさまざまなプログラミング問題をご用意していますので、ご自分の実力に合わせて、また実力アップに活用していただければと思います。

まとめ

Pythonのリストを基本から少し応用の範囲まで、実際に問題を解きながらご説明してきました。

リスト単体で見たときは単純なものに思えますが、for文やif文と組み合わせたり要素に対して計算をしたりとさまざまな場面で用いられます。たくさん問題を解いて確実に身につけられるとよいですね。

ちなみに冒頭でご紹介したAmazonギフト券が当たるキャンペーンは、指定のスキルチェック問題を解いて、paiza内のインタビュー記事を読むことで応募完了となります!詳しくはこちらから

プログラミング学習を始めたばかりの方でもpaizaラーニングレベルアップ問題集を使って学習して、ぜひ挑戦してみてください。

paizaラーニング

練習問題をたくさん解いたあと、そろそろ自分のプログラミング力を腕試ししてみたい!という方は、時間制限ありのスキルチェックにもチャレンジしてみてください。

詳しくはこちら
paizaのスキルチェック

*1:無料会員の場合、閲覧にはpaizaへログインすると獲得できるチケット(最大6枚蓄積可能)の消費が必要です。

paizaのおすすめコンテンツ

PPG proken プログラミングゲーム「初恋 プログラミング研究会〜海に行こうよ〜」 PPG Bingo プログラミングゲーム「コードレビューBINGO!!」
paiza転職 paiza新卒 EN:TRY paizaラーニング 記事内に記載している情報は、記事公開時点でのものとなります。 Copyright Paiza, Inc, All rights reserved.