ネストしたリストをフラット化する

Python独学ならTech-Joho TOP > Python問題集 > ネストしたリストをフラット化する

問題

下のような2重のリストがあります。

data= [[1,2,3], [4,5,6], [7,8,9]]

これを、[1,2,3,4,5,6,7,8,9]のような1重のリストに変換して、printで表示してください。

(チャレンジ1): 1行で書いてください。
(チャレンジ2): importを使わずに、組み込み関数だけで実現してください。
(チャレンジ3): 2重に限らず、何重にネストしていても使える方法にしてください。

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

実行結果の例

この様に表示されます。

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

回答例

例えば、sumを使うと、下のように書くことができます。

 print(sum(data, []))

解説

組み込み関数sumの第2引数を使うと簡単に実現できます。
sumは、第一引数のiterableオブジェクト(リストみたいなやつ)の各要素の合計を計算します。
第2引数は、省略可能な引数で、合計を足す初期値を表します。
もし与えられなければ、0となります。

関数sumの第2引数に空のリスト[]を与えると、[]に第一引数の各要素を足していきます。
そして、リスト同士の和は、その全ての要素を足したリストになります。
下のようなコードを実行してみてください。

これらの機能を使うことで、2重のリストをフラット化することができます。

3重以上にネストしたリストのフラット化については、考えてみてください!

[1, 2, 3] + ["a", "b", "c"]

関数sumの仕様は公式リファレンスに載っています。
Python3 reference/sum
Python3 reference: augmented assignment statements

足した結果を足された変数に代入する(複合代入演算子)

Python独学ならTech-Joho TOP > Python問題集 > 足した結果を自分に代入する(複合代入演算子)

問題

変数xに、xに220を足した値を代入するコードを書いてください。
ただし、xを1度しか書いてはいけません。

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。
 

 

実行結果の例

結果は表示されません。

なし

回答例

複合代入演算子”+=”を使うと、下のように書くことができます。

x += 220

解説

“+=”という記号は、”+”と”=”をあわせたような機能を持つ演算子です。
左辺に書いた変数に、右辺を足した値を、左辺に書いた変数に代入します。
このような、2つの機能を一度に実現する複合代入演算子の一つです。

例えば、下の2つのコードの機能はほぼ同じになります。

x = x + 99
x += 99

Pythonで利用できる複合代入演算子については、下のリンク先にある公式リファレンスに記載されています。
Python3 reference: augmented assignment statements

割り算の余り以外の答え

Python独学ならTech-Joho TOP > Python問題集 > 割り算の余り以外の答え

問題

450 割る 3の余りを計算するPythonコードは?

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。
 

 

実行結果の例

計算結果が表示されます。
(REPL環境以外では表示されません。)

150

回答例

割り算の答えの整数部分を表示するには、専用の演算子がアリマス。

450 // 3

解説

割り算のときに、”/”ではなく、”//”(スラッシュが2つ)の演算子を使うと、わり算の答えのあまり以外の部分、つまり整数部分を計算することができます。

987 % 2

Pythonで利用できる計算の演算子については、下のリンク先にまとめてあります。
簡単な計算をしてみよう(第3回)

割り算のあまり

Python独学ならTech-Joho TOP > Python問題集 > 割り算のあまり

問題

233 割る 50の余りを計算するコードを書いてください。

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

 

実行結果の例

結果は33になります。
(REPL環境以外では表示されません。)

33

回答例

割り算の余りを計算する専用の演算子(記号)を使う方法だと、下のようになります。

233 % 50

解説

Pythonでは、”%”の記号(演算子)を使うと、割り算の余りを計算することができます。
具体的には、割られる数 % 割る数と書きます。
例えば、100 割る 3の余りは、このようになります。

100 % 3

Pythonで利用できる計算の演算子については、下のリンク先を御覧ください。
簡単な計算をしてみよう(第3回)

掛け算

Python独学ならTech-Joho TOP > Python問題集 > 掛け算

問題

100掛ける256を計算して、変数answerに結果を代入せよ。
コードは1行にしてください。

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

実行結果の例

実行結果が値を返さないので、何も表示されません。

なし

回答例

答えは、例えばこうなります。

answer = 100 * 256

解説

Pythonでは、掛け算の記号は”*” (アスタリスク)です。
、掛け算をするには、数値 * 数値と書きます。
例えば、2 かける 3は このようになります。

2*3

Pythonでの計算の方法については、下のリンク先を見てください。
簡単な計算をしてみよう(第3回)

変数に値を代入する方法(第4回 )

割り算

Python独学ならTech-Joho TOP > Python問題集 > 割り算

問題

100割る3を計算し、変数answerに結果を代入せよ。
1行にすること。

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

 

実行結果の例

今回は、実行結果が値を返さないので、何も表示されません。
単に計算をするだけです。

なし

回答例

これが答えの例です。

answer = 100 / 3

解説

Pythonの割り算の記号は”/”です。
割り算をするには、割られる数 / 割る数と書きます。
例えば、150 割る 3は、下のように書きます。

150/3

注意点としては、割り算の答えは常に少数(float型)になることです。
整数に丸めた答えが必要な場合は、”//”という記号を使います。

参考
Python3 reference binary-arithmetic-operations

割り算と変数への代入については、こちらの記事で復習してください。
簡単な計算をしてみよう(第3回)

変数に値を代入する方法(第4回 )

引き算

Python独学ならTech-Joho TOP > Python問題集 > 引き算

問題

10 – 2を計算し、変数answerに結果を代入せよ。
1行にすること。

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

 

実行結果の例

今回は、実行結果が値を返さないので、何も表示されません。
単に計算をするだけです。


回答例

これが答えの例です。

answer = 10-2

解説

Pythonで引き算をするのは非常に簡単です。
数学の書き方ように、「引かれる数 – 引く数」と書きましょう。
例えば、262 – 10は、下のように書きます。

262-10

また、変数への代入は「=」を使います。これも数学の書き方と同じです。
「変数 = 代入したい値や式」と書きます。
例えば、変数xに2億を代入したいときは、下のように書きます。

x = 200000000

引き算と代入の方法については、こちらの記事が参考になります。
簡単な計算をしてみよう(第3回)

変数に値を代入する方法(第4回 )

Pythonを学べる大学一覧2019

Pythonについて学ぶことができる大学を調べたので、紹介します。2019年度版の各大学のシラバス(科目表)にのっている最新データをまとめました。大学でPythonを学ぶ参考にしていただければと思います。

シラバスの調査対象としたのは、旧帝国大学(東京大学、京都大学、名古屋大学、大阪大学、東北大学、北海道大学、九州大学)、GMARCH(学習院大学、 明治大学、青山学院大学、立教大学、中央大学、法政大学 ) 、日東駒専(日本大学、東洋大学、駒沢大学、専修大学)、関関同立(関西学院大学、関西大学、同志社大学、立命館大学 )の名門・有名大学群です。

なお、2018年度の記事はこちらです。


日本大学

生産工学部

生産工学部シラバス

日本大学の生産工学部は、機械、電子科学、土木、数理情報等、幅広い学科を備えた工学系の学部です。

キーワード”python”で科目を検索した結果、 下の 6件の講義がヒットしました。

講義名学年
計測工学 2
数値計算法 3
複雑系と創発 2
アルゴリズミックデザイン
教養課題研究 1
アルゴリズミックデザイン特講 大学院2年

2年生以上向けで、各科目での専門的な内容を学ぶ専門科目が多いため、 Python自体を学ぶのではなく、Pythonを道具として使っていろいろなことを実現する、応用色の強い内容が主です。
唯一の1年生向けの科目である「教養課題研究」も、ラズベリーパイという小型コンピュータを用いたIoTをテーマにした演習でした。


理工学部

理工学部シラバス

日本大学理工学部も、生産工学部と同じような光学系の学部です。建築系、海洋建築、航空宇宙等、こちらにしかない学科もあります。

生産工学部のシラバスで、”Python”で本文検索したところ、下の1科目しかヒットしませんでした。

講義名学年3
ゼミナールⅡ 3

この科目は、都市工学に関するゼミ、つまり少人数で議論したり、具体的なプロジェクトを進めたりする内容でした。


文理学部

文理学部シラバス

文理学部は、その名の通り文系、理系の融合をうたう学部です。一般的に文理学部という名前の学部は、教育学部系のことが多いのですが、ここでも教職コースがあり、先生になるための資格をとることができます。

シラバスの検索機能で”Python”を検索したところ、大量の科目がひっかかりました。

講義名学年
社会学応用講義Ⅱ 2-4
社会学演習2 2
ゼミナール2 3
ゼミナール4 4
ネットワーク論 3,4
社会学演習1 2
社会調査入門 1
ゼミナール1 3
ゼミナール3 4
データ収集・分析法入門 1
図書館基礎特論 2
応用空間分析法(含実習) 3
地球科学情報学実習 2
情報科学講究1 3
情報科学研究1 4
情報科学講究2 3
特別研究 4
特別研究A 4
特別研究B 4
特別研究 4
特別研究A 4
計算物理学
計算物理学
3
プログラミング入門2
数値計算入門2
2

菅野剛先生の社会学に関する演習で利用される例がとても多いです。近年では、文系の科目でもデータ分析にはPythonを使うことが一般的になっています。1年生向けの科目もあります。他にも、GIS(地理情報システム)を用いた演習や、図書館司書向け科目、物理学の数値計算など、面白そうな応用科目がたくさんあります。特別研究はいわゆる卒業研究です。


東洋大学

東洋大学シラバス

東洋大学では、6件のpython関連の講義が見つかりました。
東洋大学には、総合情報学部と情報連携学部の2つの情報系学部があります。Pythonが関係する講義があったのは合わせて76科目と、かなり多いです。

データ・サイエンス論Ⅰ
情報連携ビジネス演習ⅡB①
情報連携ビジネス演習ⅡB②
情報連携ビジネス演習ⅣA①
情報連携ビジネス演習ⅣA②
データ・サイエンス特論Ⅱ-
英語リスニングとスピーキングⅡA1クラス
英語リスニングとスピーキングⅡB1クラス
情報リテラシーⅠ 生1
地域データ分析/データ解析演習/情報モデリングC/地域データ分析Ⅰ1
データ・マイニング論①
ディープ・ラーニング①
地域データ分析/情報入門・データ解析

多いので、一部の抜粋を示してあります。

ビジネスとつく講義は、情報連携学部の中でも経営に関係するコースの科目です。ここでも、文系科目の中でもPythonが使われています。また、ディープラーニングなど、コンピュータ科学系の科目もたくさんあります。


駒沢大学

駒沢大学シラバス

駒沢大学は、文系学部が中心の大学です。Pythonについて検索すると、心理学系と、経済学系の2科目が見つかりました。前者は、心理学系と言っても、 人工知能 を心理学の観点から論ずるというものです。

講義名
心理学特講ⅢA
ミクロ経済学特殊研究

専修大学

専修大学シラバス

専修大学には、ネットワーク情報学部という情報系学部があります。また、経営学部、商学部もPythonと関係がありそうです。

検索した結果、6件のPython関連科目が見つかりました。

講義名学年
アプリケーションプログラミング 2-4
外国書講読 3
外国書講読演習 3
ゼミナール 2,3,4
ゼミナール 3,4
特殊演習(Webプログラミング) 2-4

Python関連では定番の プログラミング系科目の他に、 ディープラーニングに関する外国の書籍を輪読(みんなで読むこと)するというユニークな講義もあります。


学習院大学

学習院大学シラバス

学習院大学のPythonを扱う授業は、基本的に情報処理の入門的な内容が多いようです。初学者にも向いているので、このような例も多いです。
ひとつだけ、認知心理学のゼミナールの授業があります。Pythonを使って心理学実験を実施できる定番ソフト、PsychoPyを使って実際に知覚心理学の実験を行い、データ分析をする内容です。

講義名
学習・認知心理学ゼミナールB 3,4
情報処理入門1・物理学科向 1-4
情報処理入門1・化学科向 1-4
情報処理2 1-4
情報数理解析入門2・B 1-4

明治大学

明治大学も様々な学部を擁する大学です。理工学部と総合数理学部の科目と、主に1年生が受講する情報系の共通科目にPythonを利用するものが見つかりました。

明治大学シラバス

理工学部

明治大学の理工学部では、情報科学科、数学科、物理学科の専門科目に、Pythonを用いるものが5件見つかりました。専門科目ですので 、3年生以降向けの内容です。

ニューラルネットと脳科学について学ぶ内容や、微分方程式の数値解析、機械学習等、計算機科学の高度な内容をPythonを使って学ぶものなど、面白そうなコンテンツがそろっています。

講義名学年
数理コンピュータ科学演習 3
脳情報システム論 3
数理コンピュータ科学演習 3
情報システム論 3
情報システム論演習3

総合数理学部

明治大学の総合数理学部には、Pythonを使う科目が2つ見つかりました。

プログラミング演習は、その名の通り初学者向けのプログラミングの入門的な内容で、C言語も併用しています。

アルゴリズム論は、コンピュータサイエンス系の学部で必須のデータ構造とアルゴリズムという科目で習うことの多い、スタック、キュー、リスト、ハッシュ等の基本的なデータ構造について、Pythonを用いて学ぶという内容です。

講義名
プログラミング演習Ⅰ(現象数理学科)
アルゴリズム論(現象数理学科・ネットワークデザイン学科

共通科目

明治大学 の共通科目には、情報関係科目というものがまとめられています。その中に、Pythonを使うものが見つかりました。

講義名
ICTアプリ開発Ⅱ ( 巽 久行 )
ICTアプリ開発Ⅰ ( 野口 喜洋 )
ICTアプリ開発 Ⅱ ( 野口 喜洋 )

  ICTアプリ開発 Iはプログラミングの入門、ICTアプリ開発Ⅱ はオブジェクト指向の基礎と、本サイトでも扱っているPygameやTkinterを用いたGUIプログラミング等、Pythonプログラミングの中級編的な内容です。

pygameを使ってPythonで絵を描く

tkinterを使ってPythonで絵を描く


青山学院大学

青山学院大学シラバス

青山学院大学では、Pythonの関係ある科目は23件もありました。理工学部の情報テクノロジー学科と経営システム学科の授業が多いですが、経済学部や日本文学科等、文系学部もあります。後者は、心理学実験や、日本語の自然減処理等、応用的な内容です。

講義名教員学部/学科
演習(卒業論文)宮城島 要経済学部
日本語日本文学情報処理法Ⅰ岡田 一祐日本文学科
日本語日本文学情報処理法岡田 一祐日本文学科
心理学実験プログラミング薬師神 玲子教育人間 心理学科
イギリス事情Ⅰ(英語講義)HARPER,Paul A.K.英米文学科
イギリス事情Ⅱ(英語講義)HARPER,Paul A.K.英米文学科
特殊講義(社会保障と保険1)吉田 健三経済学部
化学情報処理実習中田 恭子/​髙橋 慧化学・生命
アルゴリズムとデータ構造居駒 幹夫社会情報学部
情報テクノロジー輪講Ⅰ大原 剛三情報テクノロジ-
情報テクノロジー輪講Ⅰ原田 実情報テクノロジ-
実践機械学習小野田 崇経営システム
研究開発と製品設計小野田 崇経営システム
研究開発管理小野田 崇経営システム
情報テクノロジー輪講Ⅱ大原 剛三情報テクノロジ-
情報テクノロジー輪講Ⅱ原田 実情報テクノロジ-
実践機械学習小野田 崇情報テクノロジ-
研究開発と製品設計小野田 崇情報テクノロジ-
研究開発管理小野田 崇情報テクノロジ-
経営システム工学輪講Ⅰ小野田 崇/​西垣 貴央経営システム
経営システム工学輪講Ⅰ小林 和博経営システム
経営システム工学輪講Ⅱ小林 和博/​高澤 陽太朗経営システム
卒業研究Ⅰ楽 詠コウ情報テクノロジ-

立教大学

立教大学シラバス

立教大学の授業でPythonを用いものは7件ありました。

講義名備考
プロジェクト研究B1 「デジタル社会学」のリサーチデザイン 

専門演習2
デジタル・データ分析
ITと経営
ゼミナール A 財務会計とAI 
ゼミナール B 財務会計とAI 
情報処理
情報科学(化)

プロジェクト研究は、 「デジタル社会学」のリサーチデザイン  」をテーマとして、ソーシャルメディアのビックデータ解析の内容う組む、社会学において情報工学を応用する計量経済学系の授業です。

専門演習2は、 デジタル・データ分析 として、SNSのデータやオープンデータを分析します。

ゼミナールAとBは、 財務会計とAI がテーマで主に簿記の演習ですがPyhtonの演習もあります。また、卒業論文のテーマの1例として、Pythonアプリ開発があがられています。

その他の授業は、情報処理の演習や、Pythonを分析に用いる文系の内容です。


中央大学

中央大学シラバス

中央大学では、48件と、大量の科目が見つかりました。そのうち20件は長塚豪己先生の卒業研究でしたので、下の表ではまとめました。低学年の入門科目から、理工学部の専門的な内容まで、いろいろな授業でPythonが使われています。

学部後尾名教員学年
経済学部入門ICT演習伊藤 篤1
経済学部入門ICT演習伊藤 篤1
経済学部入門ICT演習伊藤 篤1
理工学部計算機シミュレーション1石井 靖3
理工学部情報処理演習2岩舘 満雄1
理工学部バイオインフォマティクス岩舘 満雄2
理工学部卒業研究Ⅰ髙桑 宗右ヱ門4
理工学部情報処理檀 一平太1
理工学部情報処理演習檀 一平太1
理工学部情報処理續木 大介1
理工学部情報処理演習續木 大介1
理工学部卒業研究長塚 豪己4
理工学部卒業研究Ⅱ長塚 豪己4
理工学部アルゴリズムとデータ構造演習福永 拓郎2
理工学部アルゴリズムとデータ構造演習福永 拓郎2
理工学部アルゴリズムとデータ構造演習福永 拓郎2
理工学部計算機シミュレーション2水野 貴之3
文学部ネットワーク技術(1)松崎 和賢2~4
文学部ネットワーク技術(2)松崎 和賢2~4
商学研究科博士課程前期課程Financial dealings and the market economy (1)森谷 博之1
理工学研究科博士課程前期課程マーケティング特論第二生田目 崇1
理工学研究科博士課程前期課程知能システム工学特論第一難波 英嗣1
理工学研究科博士課程前期課程知能システム工学特論第二難波 英嗣1
理工学研究科博士課程前期課程応用水環境システム工学山村 寛1
理工学研究科博士課程前期課程生命科学特論第三米田 茂隆1
文学研究科博士課程前期課程心理学情報処理演習金沢  創1

法政大学

法政大学シラバス

法政大学では、シラバスが学部ごとに分かれているので、それぞれの学部についてまとめました。

共通科目など

Pythonに関連するものは2つ見つかりました。

講義名学年
コンピュータと数理の活用 2-4年
情報処理技法

コンピュータと数理の活用 は、数理系のいろいろなプログラムの事例を学ぶ内容です。

情報処理技法は、 TensorFlowとKeras という機械学習のフレームワークを持ち知恵、畳込みネットワーク等、ディープラーニングの技術を学ぶやや行動な内容です。

経営学部

11件のPythonを使う科目がありました。プログラミング言語1と2はその名の通り、プログラミング自体の演習系の科目のようです。「演習」という科目が9つありますが、「 クリエイティビティのマネジメント」をテーマとした総合的な演習の中で、データ分析のためのツールとしてPythonを使うものです。

講義名
プログラミング言語1
演習
プログラミング言語2

社会学部

2件が見つかりました。プログラミング自体の授業と、都市社会学系の演習のようです。

講義名
システム・プログラミングB
都市空間分析

理工・生命科学部

以外にも、「情報処理技法」という共通科目にもある内容だけでした。

デザイン工学

見つかったのは、1件だけでした。「デジタルスタジオ」という、3Dモデルづくりや、動画作成等、情報技術を用いたデザイン技術を学ぶ内容です。コンピュータによって自動的に形状を生成するためのツールとして、Pythonを使います。

情報科学部

17件のPythonを使う科目が見つかりましたが、同じ名前の「プログラミング入門」という授業が多いので省略しました。

講義名
プログラミング入門1(python)
ヒューマンコンピュータインタラクション
プログラミング演習2(python)
デジタル信号処理
音声情報処理
プロジェクト1, 2A

珍しく、 人とコンピュータの対話、その手段を対象とするヒューマンコンピュータインタラクション の授業があります。GUI(グラフィカルユーザインタフェース)を作るのにPythonを使います。

「プロジェクト」という科目は、数値計算やデータ解析を実践的に学ぶ内容で、自分で対象とするデータを決めるようです。


関西学院大学

関西学院大学は、兵庫県にある総合大学です。

関西学院大学シラバス

シラバスを検索したところ、10件のPython関連科目が見つかりました。ほとんどが理工学部の開講です。

学部講義名
理工学部 数学特別演習I 10
理工学部 数学特別演習II  10
理工学部 応用数理特別演習I  10
理工学部 応用数理特別演習II  10
理工学部 コンピュータ演習A 5
理工学部 コンピュータ演習A 6
理工学部 ネットワークコンピューティング実習
総合政策 プログラミング基礎 3
共通 コンピュータ実践(データ分析) 5
マスター・セミナー 32

理工学部の科目は、〇〇特別演習という名前の物が多いですが、これは4年生等上級生向けです。Pythonの基本も押さえていますが、どちらかというと、Pythonを道具としてその他の学問を学ぶものが多いです。例えば、 数学特別演習I 、 コンピュータ実践(データ分析)は、統計学やデータ分析のためにPythonを使います。下の方にある「 プログラミング基礎」は基礎的な内容です。


関西大学

関西大学のシラバスはこちらです。関大の理系の学部としては、 総合情報学部 と理工学部があります。

関西大学シラバス

Python関連の授業は10件が見つかりました。7件が理工学部の科目です。

学部講義名
総合情報学部専門演習
総合情報学部 専門演習
総合情報学部 経済情報処理実習
社会学部コンピュータ・プログラミング演習
社会学部 コンピュータ・プログラミング演習
理工学研究科 M確率モデル
総合情報学部 機械学習実習
総合情報学部 空間情報管理実習
総合情報学部 アルゴリズム解析・設計
総合情報学部 認知ロボティクス

こちらの大学でも、やはりPythonを使ってデータの分析をする例が多いです。理工学研究科の科目は、大学院生向けなので難しい内容です。 ちょっと珍しいと心では、空間情報管理実習 は、認知ロボティクスは認知科学や心理学を学びつつ、 機械学習等を用いてロボットでそれを実現するというものです。

社会学部の2つの科目では、Pythonを用いたプログラミングの基礎的内容を学習です。


この後も、旧帝国大学や、関関同立等の大学の情報を追加予定です。


フリー写真素材ぱくたそ

リスト[]の使い方: 負のインデックス

Python独学ならTech-Joho TOP > Python用語辞典 >リスト[]の使い方: 負のインデックス

インデックス

リストのインデックスとは、リストの後ろの[]の中に入れる数字です。リストの要素にアクセスするとき、何番目の要素かを指定する数字です。

>>> mylist = [1, 9, 9, 8]
>>> print(mylist[0])
1

上の例でいうと、mylist[0]の0がインデックスです。この例だと、0番、つまり一番最初の要素である1が表示されます。

負のインデックス

このインデックスは負の数値も指定できます。この場合、後ろから数えて何番目か、という指定になります。

注意点は、この場合は1で番号が始まります。つまり、-1が一番後ろです。

>>> mylist = [1, 9, 9, 8]
>>> print(mylist[-2])
9

上の例だと、-1は後ろから1番目なので、8が表示されます。

関数を作ってコードを再利用する | Python独学ならTech-Joho(12)

Python独学ならTech-Joho TOP > Python入門カリキュラム > たくさんのデータで同じ処理を繰り返す

関数とは

関数は、データを変換する道具です。 その使い方についてはこちらの記事で説明しました。 関数とメソッドを使ってみる

Pythonに限らず様々なプログラミング言語では、関数は使うだけでなく、自分でオリジナルのものを作ることができます。
今回は、この「関数を作る」方法やその目的や利点を解説します。

関数を作りたい時、作りたい時とは

自分で関数を作らなくても、プログラムを作ることはできます。
それでは、関数を作る理由とはなんなのでしょうか?
それは、同じような処理を複数の箇所でするときに、同じようなコードを何度も書くのではなく、一度書いたコードを使いまわすためです。
言い換えると、関数を作るべき時とは同じようなコードを何度も書いている時です。

熟練のプログラマーなら、3回くらい同じようなコードを書いたな、と思うと関数を作りたくなってくるはずです。同じようなコードを書くということは、繰り返し同じような処理を人間が手動でやっているということです。 しかし、繰り返し同じような処理をやるのはコンピュータの方が人間より得意です。プログラムを書く大きな理由の一つがコンピュータに同じような繰り返し処理をやらせることだといっても過言ではありません。


関数の作り方

まず、Pythonにおける関数の作り方を簡単に解説します。

関数を作ることを、関数を「定義する」と言います。一般的に、pyhtonで関数を定義するときには、下のように書きます。

>>> def 関数名(引数):
>>>        return 戻り値
  • 最初にdef を書き、その後ろにスペースを空けて、関数の名前を書きます。
  • 次に、関数名の後ろに()を書いて、その中に引数の変数名を書きます。
  • 次の行からは、関数の中で実行する処理、関数の中身です。関数の中身を書く時は、まず左に4つスペースを入力してください。
  • 関数の中身の最後には、return 戻り値に指定する値 と書きます。

より詳細を正確に知りたい方は、公式ページを確認してください。

https://docs.python.org/ja/3/tutorial/controlflow.html#defining-functions

関数定義の具体例

具体をお見せしましょう。下に書いてあるのは、文字列の最初の一文字を取り出す関数saishoを作っているところです。意味が分かりますか?

>>> def saisho(mojiretsu):
>>>        return saisho[0]
  • 最初にdef を書き、その後ろにスペースを空けて、関数の名前を書きます。
    • (上の例でいうとsaishoです。)
  • 次に、関数名の後ろに()を書いて、その中に引数の変数名を書きます。
    • (上の例でいうとmojiretsuです。)
  • 次の行からは、関数の中で実行する処理、関数の中身です。関数の中身を書く時は、まず左に4つスペースを入力してください。
    • (この関数は1行しか中身がありません。”return saisho[0]”です。)
  • 関数の中身の最後には、return 戻り値に指定する値 と書きます。
    • ( この関数でいうと、”return saisho[0]”です。 )

なお、saisho[0]の意味は、変数saishoの最初の1文字を取り出す処理です。pythonの番号の数え方は0で始まります。そのため、[0]で0番目、つまり最初の1文字を取り出します。ちなみに、[1]で2番目、[2]で3番目…と続きます。
文字列から一部の文字を取り出す方法については、こちらの記事もご覧ください

この関数を作った後、使ってみる例は以下のようになります。

>>> def saisho(mojiretsu):
...     return mojiretsu[0]
... 
>>> saisho("aiueo")
'a'

この例では、関数saisho を実行しています。その時、文字列”aiueo”の引数に指定しています。すると、”aiueo”の最初の1文字である1が返ってきました。
関数を使う方法については、こちらの記事をご覧ください。

関数定義の練習

名前はtwo、引数はmojiretsuで、引数mojirestuが文字列だとして、その2番目の文字を戻り値にする関数を定義してみましょう

>>> def two(mojirestu):
...     return mojiretsu[1]
... 

このようになるのが分かりますか?ヒントはpythonでは文字列の中の文字にアクセスするときの番号は0で始まるということです。

関数を作る例

関数の作り方は上で解説しましたが、関数をどのような時に作るべきか、まだはっきりとはわからないこともあると思います。
そこで、プログラムを書いていて、関数を作るべき例と、関数を作った後のビフォーアフターの例をいくつかご紹介しましょう。

文字列の最初の文字を取り出したい

手元に、近畿地方の都道府県の名前のリストがあるとします。このたくさんの文字列のそれぞれ最後の一文字を表示するpythonコードを書きたいとしましょう。表示された「県」や「府」の数を数えると、近畿地方にいくつの府県があるか分かるというわけです。

>>> namelist = ["大阪府", "京都府", "兵庫県", "奈良県", "三重県", "滋賀県", "和歌山県"]

関数を自分で作らずに書くとすると、下のような例が考えられます。

ビフォー: 同じようなコードをたくさん書く例

>>> namelist = ["大阪府", "京都府", "兵庫県", "奈良県", "三重県", "滋賀県", "和歌山県"]
>>> name = namelist[0]
>>> print(name[-1])
府
>>> name = namelist[1]
>>> print(name[-1])
府
>>> name = namelist[2]
>>> print(name[-1])
県
>>> name = namelist[3]
>>> print(name[-1])
県
>>> name = namelist[4]
>>> print(name[-1])
県
>>> name = namelist[5]
>>> print(name[-1])
県

ステップ1: リスト namelistの要素を1つ取り出す

まず、リストの要素を一つずつ取り出します。一番最初から始めるとすると、リストの変数namelistの最初の要素を取り出すのはnamelist[0]と書きます。これは”大阪府”という文字列です。


ステップ2: 文字列の最後の文字取り出す

次に、その文字列の一番最後の文字を取り出します。ここで、リストの一番後ろの要素を取得するときは、[-1]という番号を指定できました。

リストの使い方:負のインデックス

それと同じように、文字列の一番後ろの文字を取り出したいときも、文字列の変数名[-1]と書けます。

つまり、name = namelist[0]と name[-1] で、namelistの中の最初の要素”大阪府”の最後の文字”府”を取り出すことができます。上の例ではこの文字をprintで画面に表示しています。

ステップ3: リストnamelistのすべての要素について繰り返す

ステップ2とステップ3を、大阪府以外の要素についても繰り返します。

問題

この例でも、 「近畿地方の都道府県の名前のリストの要素のそれぞれ最後の一文字を表示 する」ことはできています。しかし、print(namelist[2][-1])のようなコードを6回も書いています。各行は、[]の中の数字しか違いません。


アフター: 関数を作成して同じようなことをたくさん書かない例

上のコードで、同じようなことを書いていた個所を 関数にしてまとめましょう。

>>> namelist = ["大阪府", "京都府", "兵庫県", "奈良県", "三重県", "滋賀県", "和歌山県"]
>>> def print_one(targetlist, i):
...     name = targetlist[i]
...     print(name[-1])
...
>>> print_one(namelist,0)
府
>>> print_one(namelist,1)
府
>>> print_one(namelist,2)
県
>>> print_one(namelist,3)
県
>>> print_one(namelist,4)
県
>>> print_one(namelist,5)
県

print_oneという関数を定義し、引数にはリストと、その何番目を表示するかという番号をとります。この関数にnamelistと番号を指定して6回実行しています。

print_one関数を最初に定義する箇所が増えましたが、関数を6回実行する箇所は1行に減ったので、全体としてすっきりした構造のプログラムになりました。

今回のような例なら、関数を作らなくてもあまり変わらないようにも見えるかもしれません。しかし、もし、最後の1文字を表示していたプログラムを、最初の1文字を表示するプログラムに変更したいとしたらどうでしょうか? ビフォーの例だと、[-1]と書いてある6箇所を[0]に書き換える必要があります。アフターの例だと、関数の中の1箇所だけです。このように、関数を作るとプログラムに変更を加えることが容易になる場合があります。

<< 前へ 第11回 たくさんのデータで同じ処理を繰り返す

>> 次へ 第13回