乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

プログラミング

20.リスト2



                    前回はこちら

                       要素の削除

                          del とインデックスを使う方法

                          del リスト[インデックス値]
                          del リスト[開始:終了]

In [16]:
l = ["A", "B", "C", "D", "E", "F", "G"]
print (l)

# 2番目を削除
del l[1]
print (l)

# さらに2番目,3番目を削除
del l[1:3]
print (l)
['A', 'B', 'C', 'D', 'E', 'F', 'G']
['A', 'C', 'D', 'E', 'F', 'G']
['A', 'E', 'F', 'G']

pop関数を使う

リスト.pop(インデックス値)

In [17]:
l = ["A", "B", "C", "D", "E", "F", "G"]
print (l)

# 4番目を削除
l.pop(3)
print (l)
['A', 'B', 'C', 'D', 'E', 'F', 'G']
['A', 'B', 'C', 'E', 'F', 'G']
In [18]:
l = ["A", "B", "C", "D", "E", "F", "G"]

# 要素がない場合はエラーになる
l.pop(8)
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-18-e70c4ed39c67> in <module>()
      2 
      3 # 要素がない場合はエラーになる
----> 4 l.pop(8)

IndexError: pop index out of range

IndexError : インデックスの値が要素数を超えていたりする場合に発生するエラー

remove関数を使う

リスト.remove(指定の値)

In [19]:
l = ["A", "B", "C", "D", "E", "F", "G"]
print(l)

# 要素の A を削除
l.remove('A')
print (l)
['A', 'B', 'C', 'D', 'E', 'F', 'G']
['B', 'C', 'D', 'E', 'F', 'G']
In [20]:
l = ["A", "B", "C", "D", "E", "F", "G"]

# 要素がない場合はエラーになる
l.remove('H')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-20-ef7a132af295> in <module>()
      2 
      3 # 要素がない場合はエラーになる
----> 4 l.remove('H')

ValueError: list.remove(x): x not in list

ValueError : リストに削除する値が含まれていないから発生したエラー

削除するには、有ったら削除するという工夫が必要です。

次にリストの機能ではないですが
リストの要素の値の検索ができます。

in 演算子を用いると
中身が検索できて、その結果がbool型で返ってきます。

In [21]:
l = ["A", "B", "C", "D", "E", "F", "G"]
print ('K' in l)
False

このbool型の結果を用いて有ったら削除することができます。

リストの要素の並べ替え

並べ替えは

昇順:リスト.sort()
降順:リスト.sort(reverse=True)

sort関数を使って行います。

In [22]:
a = [1,4,3,5,6]
print(a)

# 昇順で並び替え
a.sort()
print(a)
[1, 4, 3, 5, 6]
[1, 3, 4, 5, 6]
In [23]:
a = [1,4,3,5,6]
print(a)

# 降順で並び替え
a.sort(reverse=True)
print(a)
[1, 4, 3, 5, 6]
[6, 5, 4, 3, 1]

要素を逆に並び替える

リスト.reverse()

In [24]:
a = [1,4,3,5,6]
print(a)

# 格納した逆の順番で並び替え
a.reverse()
print(a)
[1, 4, 3, 5, 6]
[6, 5, 3, 4, 1]

リストは複数の値を確保できるので
様々な用途でプログラムでは用いられます。

使用頻度もTop3くらいにはなるかと思いますので
取り扱い方は押さえておきましょう。

                 20.リスト1

プログラム言語の中では特殊なデータの形を取り扱うことができます。

それが辞書型やリスト型といったデータ構造のものです。

pythonではリスト型というデータ構造を定義できます。
リスト型のデータを作るには [ ] 四角カッコ を用います。 
四角カッコで括った中に、格納したいデータの形でデータを入力します。

リスト型の値は、要素を複数持つことができます。
リストの値に要素をたくさん入れ込むには カンマ でつなぎます。
[]
[要素,要素,・・・]

例:
[1,2,3]

リスト型の定義

In [1]:
# リスト型
[1,2,3,4,5]
Out[1]:
[1, 2, 3, 4, 5]
In [2]:
# 空のリスト(まだ要素を持っていない)
[]
Out[2]:
[]

インデックスと間違いやすいので注意

In [3]:
# これはインデックス
'abcde'[3]
Out[3]:
'd'
In [4]:
# リスト型の変数を定義
a = [1,2,3]
print(a)
print(type(a))
[1, 2, 3]
<class 'list'>

リスト型というのは複数の要素を持ったデータ構造になっていて、
リスト型の中に入れられるデータの形については特に決まりはなく
どんなデータでも入れられます。

In [5]:
a = [1,2,3,'4']
print(a)
[1, 2, 3, '4']

リストの中にリストを格納できます。

要素を取り出したい場合は
リストの分だけインデックスを用います。

In [6]:
# リストの中にリストを定義
lis_lis = [[1,2,3],[4,5,6],[7,8,9]]
print(lis_lis)

# 取り出しもインデックスで
print(lis_lis[1][2])
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
6

リストの要素の追加

変数.append(要素)

変数 += リスト
変数.extend(リスト)
リスト + リスト

In [7]:
a = [1,2,3]
# 要素の追加 append
a.append(4)
print(a)
[1, 2, 3, 4]
In [8]:
a = [1,2,3]
# 要素の追加 +=
a += a
print(a)
[1, 2, 3, 1, 2, 3]
In [9]:
a = [1,2,3]

# 要素の追加 extend
a.extend([4,5])
print(a)
[1, 2, 3, 4, 5]
In [10]:
a = [1,2,3]

# 要素の追加 リスト + リスト
a = a + a
print(a)
[1, 2, 3, 1, 2, 3]

値を一つだけ入れるのがappend

その他はリストをリストに追加する方法です。

リスト型の値は複数の要素をいれ込めるので
取り出し方も様々な取り出し方があります。

インデックスを使って参照する方法

In [11]:
a = [1,2,3]
# 最初の要素を取り出す
print(a[0])
print(type(a[0]))
1
<class 'int'>
In [12]:
a = [1,2,3,4,5]
# 複数の要素を取り出す(3番目から4番目まで)
print(a[2:4])
print(type(a[2:4]))
[3, 4]
<class 'list'>
In [13]:
a = [1,2,3,4,5]
# 複数の要素を取り出す(2番目から最後まで)
print(a[1:])

# 複数の要素を取り出す(最初から3番目まで)
print(a[:3])
[2, 3, 4, 5]
[1, 2, 3]

リストでは要素の順番が重要になります。

スライスを使うと複数の要素に対応します。

要素の変更

リスト型変数[インデックス値] = 変更後の値

リスト型変数[開始:終了] = [リスト]
リスト型変数[開始:] = [リスト]
リスト型変数[:終了] = [リスト]

In [14]:
a = [1,2,3,4,5]
print(a)
# 3番目の要素を 9 に変更
a[2] = 9
print(a)
[1, 2, 3, 4, 5]
[1, 2, 9, 4, 5]
In [15]:
a = [1,2,3,4,5]
# 複数の要素を変更(3番目から4番目まで
a[2:4] = [9,8]
print(a)

a = [1,2,3,4,5]
# 複数の要素を変更(2番目から最後まで)
a[1:] = [7,6]
print(a)

a = [1,2,3,4,5]
# 複数の要素を変更(最初から3番目まで)
a[:3] = [8,8,8,8]
print(a)
[1, 2, 9, 8, 5]
[1, 7, 6]
[8, 8, 8, 8, 4, 5]

インデックスの開始、終了を用いた場合は
複数の要素が同時に置き換わるので
順番にも影響が出ます。注意しましょう。

                19.基礎演習1

さーてみなさん、ここまでの講義のおさらいをしてみましょう。

ここまででやったこととしては・・
演算の仕方、文字列の書き方、インデックスって何・・
変数とデータ型、いろいろな演算子

他のプログラム言語でも共通した考えになる部分をやりました。
今回の講義はそのおさらいとなります。

復習用の問題を用意しましたので、それを解いてみましょう。
もしわからなければ、今までの講義の動画をもう一度見てみましょう。

In [ ]:
 

基礎演習問題1:

文字列型の変数を宣言してみよう(値は任意で10文字以上)

In [ ]:
 

基礎演習問題2:

5文字以上の文字列型の変数を作成し、4番目の文字を取り出そう。

In [ ]:
 

基礎演習問題3:

文字列型の変数を作成し、改行、タブを含めた文章を代入する。

In [ ]:
 

基礎演習問題4:

format関数を使い次の文章の入力部(波カッコ)に、
任意の名前を入れてを出力する : 

私がナイツの{0}です、相方の名前はね、ちょっと汚い話になりますが・・・{1}です。

In [ ]:
 

基礎演習問題5:

5桁の整数型の変数を作成し,
これを文字列に直し7ケタで0埋めして出力する。

In [ ]:
 

基礎演習問題6:

2つの整数型の変数に整数値を入れて、その大小を比較する文を書く。

In [ ]:
 

基礎演習問題7:

次の文章の中に、「浦和」という言葉がいくつあるか数える文を書く。

浦和、南浦和、北浦和、東浦和、西浦和、武蔵浦和、中浦和、浦和は7つの駅がある。

In [ ]:
 

基礎演習問題8:

無駄 を改行ありで10回表示させる文を書く。

In [ ]:
 

基礎演習問題9:

9の9乗を計算する文を書く、

In [ ]:
 

基礎演習問題10:

9の20乗と20の9乗 、どちらが大きいか、判定結果を出力する文を書く。

In [ ]:
 

すぐに答えが出ない人は、動画を止めて考えてみましょう。

コツとしては何を入力したら、どう計算されて、どう出力されるのか
それを考えながら書いてみましょう。

答えはこの下に





回答

基礎演習問題1:

文字列型の変数を宣言してみよう(値は任意で10文字以上)

In [1]:
# データとして文字列にするにはシングルクォートかダブルクォートで囲むだけ
answer = '生麦生米なまたまご、字足らず'
print(answer)
生麦生米なまたまご、字足らず

基礎演習問題2:

5文字以上の文字列型の変数を作成し、4番目の文字を取り出そう。

In [2]:
# インデックスを用いてx番目のデータを取り出せる
# 4番目のインデックス値は 3
answer = '123456789'
print(answer[3])
4

基礎演習問題3:

文字列型の変数を作成し、改行、タブを含めた文章を代入する。

In [3]:
# まず文字列型の変数を用意
# 改行やタブはエスケープシーケンスを用いて表現する
answer = 'こんにちは 福山雅治です、\n私は\tおおきい\tです。'
print(answer)
こんにちは 福山雅治です、
私は	おおきい	です。

基礎演習問題4:

format関数を使い次の文章の入力部(波カッコ)に、
任意の名前を入れてを出力する : 

私がナイツの{0}です、相方の名前はね、ちょっと汚い話になりますが・・・{1}です。

In [4]:
# まず文字列型の変数を用意
answer = '私がナイツの{0}です、相方の名前はね、ちょっと汚い話になりますが・・・{1}です。'
# format関数を使って値を差し込む
print(answer.format('塙','小峠'))
私がナイツの塙です、相方の名前はね、ちょっと汚い話になりますが・・・小峠です。

基礎演習問題5:

5桁の整数型の変数を作成し,
これを文字列に直し7ケタで0埋めして出力する。

In [5]:
# まずは5桁の整数型の変数を用意
answer = 12345

# これを文字列に直し7ケタで0埋めして出力する。
# フォーマット関数を使うと数値型のものを文字列の中に差し込みできる。
# 0埋めは、: コロン のあとに埋めたい文字 0を入れ桁数7を入力する
'{0:07}'.format(answer)
Out[5]:
'0012345'

基礎演習問題6:

2つの整数型の変数に整数値を入れて、その大小を比較する文を書く。

In [6]:
# まずは二つの数値を用意
a , b = 20 , 30

# 大小の比較は 比較演算子(関係演算子)を用いる
print(a < b)
print(a > b)
True
False

基礎演習問題7:

次の文章の中に、「浦和」という言葉がいくつあるか数える文を書く。

浦和、南浦和、北浦和、東浦和、西浦和、武蔵浦和、中浦和、浦和は7つの駅がある。

In [7]:
# まずは文字列型の変数を用意
answer = '浦和、南浦和、北浦和、東浦和、西浦和、武蔵浦和、中浦和、浦和は7つの駅がある。'

# count関数で文字の個数を数えることができる。
print(answer.count('浦和'))
8

基礎演習問題8:

無駄 を改行ありで10回表示させる文を書く。

In [8]:
# アスタリスクを使うと、文字の繰り返しを表現できる。
# 改行は ¥n もしくは \n
print('無駄\n' * 10)
無駄
無駄
無駄
無駄
無駄
無駄
無駄
無駄
無駄
無駄

基礎演習問題9:

9の9乗を計算する文を書く、

In [9]:
# 掛け算はアスタリスク一個 , 累乗はアスタリスク2個
print(9 ** 9)
387420489

基礎演習問題10:

9の20乗と20の9乗 、どちらが大きいか、判定結果を出力する文を書く。

In [10]:
# 9の20乗と20の9乗 を比較演算子で大小を比較する
print(20 ** 9 < 9**20)
True

ここまでは基礎だけで、書き方の部分しか触れておらず
まだ本格的なプログラミングには入っていません。

ちょっと退屈かもしれませんが、これからもっと面白くなっていきますので
引き続きプログラミングをお楽しみください。
復習も忘れずに!!

                 18.論理演算子

「論理演算子」は

比較の結果同士を加算した結果を返します。

幾つかの条件を組み合わせる場合には必ず用いる方法です。

論理演算子 としては 3つしかありません。
and
or
not

and

and は条件と条件をつなげます。
日本語だと かつ という意味合い

条件A and 条件B

条件が双方が True の場合に True 
どちらか一方でもFalseなら結果がFalseになります。

and の左側と右側の両方の条件を満たしていないと
Trueにはなりません。

In [1]:
# 二つの条件がTrue
print(True and True)

# 片方の条件がFalse
print(True and False)
print(False and True)

# 両方の条件がFalse
print(False and False)
True
False
False
False
In [2]:
# 数値型での例
print(1==1 and 2==2)
print(1==1 and 2==1)
True
False

男性、20代の人のような複数の条件を満たす判定を
行いたいような時に使います。

In [3]:
a , b = 20 , '男性'
print(a==20 and b == '男性')
True

or

orの左側と右側、どちらかの条件がTrueであればTrueを返します。
日本語の意味だと もしくは という意味合いです。

条件A or 条件B

両方満たしていればTrue
どちらか一方でも合っていればTrueが返ってきます。
両方の条件を満たせない場合のみFalseが返ってきます。

In [4]:
# 二つの条件がTrue
print(True or True)

# 片方の条件がFalse
print(True or False)
print(False or True)

# 両方の条件がFalse
print(False or False)
True
True
True
False
In [5]:
# 両方の条件を満たす場合
a , b = 20 , '男性'
print(a==20 or b == '男性')

# どちらかの条件を満たす場合
a , b = 20 , '男性'
print(a==30 or b == '男性')

# 両方の条件を満たさない場合
a , b = 20 , '男性'
print(a==30 or b == '女性')
True
True
False

not

否定する意味合いになり、結果をひっくり返します。

True はFalseに 、 FalseはTrueにします。

In [6]:
# 含む場合
d = '男性'
print('男'  in d)
True
In [7]:
# 含まれないとしたい場合
d = '男性'
print('男'  not in d)
False

プログラムの中での制御は比較演算子と論理演算子を組み合わせて
どう処理を分岐させるか、続けさせるのかを組み上げていきますので
論理演算子の使い方も覚えておきましょう。

                 17.関係演算子

イコール一つの場合は代入で値を格納することになりました。

イコールを二つ用いると、今度は左側と右側を比較する動きになります。

比較のしかたが複数あり、演算子も複数存在します。
こういった比較をする演算子を、関係演算子や比較演算子と言っています。

数値の比較

まずは数値のデータを用意します。

変数 a と b を用意して

In [1]:
a , b = 2 , 3

演算子の左と右が等しいかどうかを判定する ==

等しい場合はTrue , 等しくない場合はFalseが返ってきます。

In [2]:
# a が b と等しいかどうかの判定
a == b
Out[2]:
False

演算子の左と右が等しくないかどうかを判定する !=

等しくない場合はTrue , 等しい場合はFalseが返ってきます。

In [3]:
# a が b と異なるかどうかの判定
a != b
Out[3]:
True

演算子の左と右の大小を比べる。

演算子の左側が右側よりも小さい(未満)であったらTrue
違えばFalseが返ってきます。

In [4]:
# a が b よりも小さい(未満) 小なり
a < b
Out[4]:
True

演算子の左側が右側よりも大きければTrue
違えばFalseが返ってきます。

In [5]:
# a が b よりも大きい 大なり
a > b
Out[5]:
False

大なり小なりにイコールをつけると、以上と以下という意味になります。

演算子の左側が右側以下であればTrue , 違えば False が返ってきます。

In [6]:
# a が b 以下である 小なりイコール
a <= b
Out[6]:
True

演算子の左側が右側以上であればTrue , 違えば False が返ってきます。

In [7]:
# a が b 以上である 大なりイコール
a >= b
Out[7]:
False

ここまでの演算子は数値の計算にしか用いることができませんので
変数に格納するデータの形には注意して下さい

文字列の比較

文字列の比較は
is
not
in
などを用いる。

判定が正しければ True , 正しくなければ False を返す。

In [8]:
a , b = 'a' , 'b'

# a が b と等しいかどうかの判定
print(a is b)           

# a が b と異なるかどうかの判定
print(a is not b)       

# a が b に含まれるかどうかの判定
print(a in b)   

# a が b に含まれないかどうかの判定
print(a not in b)
False
True
False
True

特に文字が含まれるかどうか、という判定はよく用いられます。

文字の検索結果を利用したプログラムの制御は頻繁に出てきますので
in 演算子 を使った比較の方法は押さえておきましょう。

このように文字や数値を比較すると
その結果は True or False の bool型で返ってきます。

比較した結果を用いてプログラムを制御する方法が
プログラムでは多用されるので書き方は覚えておきましょう。

このページのトップヘ