- 更新日: 2018年12月27日
- 公開日: 2018年12月24日
【Python入門】リストの追加方法をマスターしよう
Python の基礎学習を終えてからも 機械学習や Django などでコードを読んだり書いたりする時、「あれっ、リストの追加ってどうだっけ??」という場面あると思います。
今回は、Python のリスト追加方法についてまとめてみました。
【Python入門】リストの追加方法をマスターしよう
Pythonのリスト追加方法【基本編】
Python でリストを扱う時、2つの方法(関数)で要素を追加することができます。
append()関数
testList = [0, 1, 2, 3]
testList.append(100)
testList
append()
関数を使うと、リストの末尾にデータを追加することが可能。
insert()関数
testList = [0, 1, 2, 3]
testList.insert(1, 99)
testList
insert()
関数を使うと、特定の位置にデータを追加することが可能。insert()
のカッコ内最初の数字(引数)で位置を指定、後の数字で値を指定しますね。
関数を応用
def some_number(x):
x.append(77)
testList = [0, 1, 2, 3]
some_number(testList)
print(testList)
こちらは append()
関数を def
内に納めた事例。GitHubなどで参考にするサンプルコードで時々登場してくる書き方なので、参考までに知っておきましょう。
しかし、このような append()
と insert()
は基本操作であって、ちょっと実用的ではありませんよね。次に実際に役立ちそうな Python のリスト追加方法をご紹介していきます。
Pythonのリスト追加方法【応用編 フォントリスト】
著書「退屈なことはPythonにやらせよう」の 17章で紹介されている事例が、今回のリスト追加方法にマッチしますのでご紹介。Pythonを使って「フォント」の一覧表示を試みたいと思います。Webデザインを考える時に、タイトルのフォントリストがあると便利ですよね。
著書「退屈なことはPythonにやらせよう」参考ページ:GitHub/オライリージャパン
--サンプルコード--
from PIL import Image, ImageDraw, ImageFont
import os
FONT_DIR = r'/usr/share/fonts/truetype'
EXAMPLE = '大島商店\n'
FONT_SIZE = 60
fonts = []
for fname in os.listdir(FONT_DIR):
if fname.endswith('.ttf') or fname.endswith('.ttc'):
fonts.append(fname)
im = Image.new('RGBA', (500, len(fonts) * FONT_SIZE), 'white')
draw = ImageDraw.Draw(im)
y = 0
for font in fonts:
draw.text((0, y), font, fill='red')
for i in range(0, 4):
try:
f = ImageFont.truetype(font, FONT_SIZE, index=i)
draw.text((200 + 200*i, y), EXAMPLE, fill='black', font=f)
except:
pass
y += FONT_SIZE
im.save('fontlist.png')
--実行結果--
--プログラムの概要--
Pillow という画像処理ライブラリを使って、PC内のフォント毎に特定の文字を出力。リストの追加は、11行目の fonts[]
という空リストに対して実行。PC内のフォント情報を習得して、 fonts[]
リストに追加して出力用紙のサイズを決定。そしてフォント情報が追加された fonts[]
リストをベースに、Pillow の draw.text()
関数でフォントを指定して「大島商店」を出力。
試しに、最初は空だった fonts[]
にどれだけの要素が追加されたかを確認してみました。
PC内のフォントデータが fonts[]
リストに追加されていることが確認できます。
ちなみに上記コードは Ubuntu を対象としており、 Windowsの場合は上から4行目の FONT_DIR = r'/usr/share/fonts/truetype'
が FONT_DIR = r'C:\windows\Fonts'
になります。
注意)英数字はほとんどキレイにプレビューされますが、ひらがな・漢字はうまくプレビューされないです。また Mac も試しましたが、ごめんなさい、エラー解決できませんでした。
Pythonのリスト追加方法【応用編 機械学習に】
機械学習の勉強をしていますと、時々学習済みプログラムに任意のデータをインプットして、結果を予測する機会があります。そんなとき、入力したデータを自動的に保存できたら便利ですよね。今回は Iris(アイリスというお花)の品種を識別するプログラムに、自分で測ったデータを入力して、その入力データと予測結果を CSV に残したい(リスト追加)と思います。
CSVへのデータ追加は、Python csvモジュールの Append機能を利用してみますね。
-- Iris(アイリス)イメージ画像 --
--サンプルコード--
import sys
import pandas as pd
import matplotlib
import numpy as np
import scipy as sp
import IPython
import sklearn
import csv
from sklearn.datasets import load_iris
iris_dataset = load_iris()
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)
sepal_length = input('sepal_length(ガクの長さ)は何cm?')
sepal_width = input('sepal_width(ガクの幅)は何cm?')
petal_length = input('petal_length(花びらの長さ)は何cm?')
petal_width = input('petal_widthは(花びらの幅)は何cm?')
X_new = np.array([[sepal_length,sepal_width,petal_length,petal_width]])
prediction = knn.predict(X_new)
print("Predicted target name: {}".format(iris_dataset['target_names'][prediction]))
y_pred = knn.predict(X_test)
print("Test set score: {:.2f}".format(knn.score(X_test, y_test)))
iris = "{}".format(iris_dataset['target_names'][prediction])
predicted_score= "{:.2f}".format(knn.score(X_test, y_test))
with open('Iris.csv', 'a') as csvFile:
writer = csv.writer(csvFile)
writer.writerow([sepal_length, sepal_width, petal_length, petal_width, iris, predicted_score])
csvFile.close()
--実行結果--
--プログラムの概要--
Pythonの機械学習ライブラリ scikit-learn にある Iris のデータセットを用いて、ガクと花びらの大きさから品種を推測。学習プログラムは、K-最近傍法。その学習済みプログラムに自分で測定した値を入力。入力値に対して Iris の品種が推測され、そのデータを CSV に記録。
小学校の理科の授業なんかに使えそうですね。
ちなみに上記コードの中でリスト追加を実行している部分は、下から 4行目の with open('Iris.csv', 'a') as csvFile:
の 'a'
です。Python の CSV モジュールは、 CSVファイルの読み込みが 'r'
、書き込み(上書き)が 'w'
、追記(Append)が 'a'
ですね。
\AIエンジニアに必要なスキルが身に付く/
まとめ
リストの追加や結合は、機械学習に Django などのアプリ開発、多くの場面で登場してきます。仮にリスト機能について詳しいことは分かっていなくても、基礎ができていればコードを読んだ時に「この部分はリスト機能でここと関連しているな」と漠然とプログラムをイメージすることが可能。このことによって「わからない部分が分かる」ようになってきます。すると自分でコードを読んだり試したりすることが楽しくなるというわけですね。
リスト以前に「Pythonプログラムの実行方法が分からない」「 import ●●
ってなに?」という方、一度 Python の基礎学習を検討されてみてはいかがでしょうか? CodeCamp なら オンライン × マンツーマン で効率よく Python の基礎を習得できると思いますよ。
- この記事を書いた人
- オシママサラ