ちょっとPython - ちょっと内包表記
リストの作り方を簡単にすることができます。まず、リストを作ってappendで追加する方法です。
import matplotlib.pyplot as plt
x, y = [], []
for num in range(6):
x.append(num)
y.append(num**2)
plt.plot(x, y)
内包表記を使って、
import matplotlib.pyplot as plt
x = range(6)
y = [num**2 for num in x]
plt.plot(x, y)
とすることができます。理解できると簡潔にかけてスッキリします。
ここでもう少し内包表記についてまとめておきたいです。以下参考サイトです。
内包表記はリストを簡単に作るために使います。
まず最初にfor in文を簡単に作ってみます。
says = "Hello"
この文字列をアルファベットで分解します。
for in 文で一文字ずつ分解します。
分解したリストを保存する変数を作ります。
chara = []
この変数にループを使って保存用のリストに追加していきます。
for i in says:
chara.append(i)
リストcharaの中には
と入っています。これを内包表記で作ってみます。
says = "Hello"
saysCharactor = [char for char in says]
通常のループ"for char in says"の前に”char"をつけます。ループで取得するcharを直接リストに追加ができます。こうすると1行で欲しい値のリストができます。簡単です。
"for char in says"で取り出した値について処理ができるようになります。"char"に何らかの処理をしたものをリストに追加していきますs。
例えば
Matrix = [[2, 1, 5],
[5, 99, 0],
[33, 2, 4]]
row_max = [max(row) for row in Matrix]
print(row_max)
ではリストの要素を"row"で取り出します。[2, 1, 5]、 [5, 99, 0]、 [33, 2, 4]がそれぞれ取り出され、それぞれに対してmax(row)で最大値を取り菜ます。それぞれの最大値[5, 99, 33が出力されます。
ifを使ってリストの中の値を選び出すこともできます。
Genius = ["Yang", "Tom", "Jerry", "Jack", "tom", "yang"]
L1 = [name for name in Genius if name.startswith('Y')]
L2 = [name for name in Genius if name.startswith('Y') or len(name) < 4]
L3 = [name for name in Genius if len(name) < 4 and name.islower()]
print(L1, L2, L3)
とすれば条件、if name.startswith('Y')、name.startswith('Y') or len(name) < 4、if len(name) < 4 and name.islower()で選び出して新しいリストを作ります。
次に2重のループを利用して文字を分解する方法です。
Genius = ["Jerry", "Jack", "tom", "yang"]
L1 = [char for name in Genius for char in name]
print(L1)
最初のループ
これで抽出された nameをもう一度ループ
この charのリストを作ります。そうすると
['J', 'e', 'r', 'r', 'y', 'J', 'a', 'c', 'k', 't', 'o', 'm', 'y', 'a', 'n', 'g']
文字を分解できます。順番としてはまず
を取り出して次にアルファベットに分解していくとバラバラになったものが取得できるという仕組みです。