【Python】文字列 リストの基本操作 【基本講座】
Pythonの文字列操作で頻繁に使うのがリストだと思います。
ここでは基本操作に関して学んでいきましょう。
文字列操作の基本
リスト list の基本操作
単純結合は「+」
リストの結合は、str型でも行ったのと同じようにできます。
リスト同士を「+」することで結合可能です。
1 2 3 4 5 |
l1=['a','b'] l2=['A','B'] print(l1+l2) >> ['a', 'b', 'A', 'B'] |
次のような、リスト+タプル はエラーが出ます。
1 2 3 4 5 |
l=['a','b'] t=(1,'aaa') print(l+t) >> TypeError: can only concatenate list (not "tuple") to list |
また、リスト+str型文字列もエラーが出ます。
1 2 3 4 5 |
l=['a','b'] s="AAAAAA" print(l+s) >> TypeError: can only concatenate list (not "str") to list |
これらを通すためには、タプル型やstr型をリスト型に変換するしかありません。
1 2 3 4 5 |
l=['a','b'] t=(1,'aaa') print(l+list(t)) >> ['a', 'b', 1, 'aaa'] |
繰り返しは「*」
これも文字列の時と同じようにできます。
1 2 3 4 5 |
l = ["A"] * 5 print(l) >> ["A", "A", "A", "A", "A"] |
リストの要素を取り出すには「:」スライス
これも文字列の時と同じようにできます。
復習程度にいくつか例を挙げます。
1 2 3 4 5 |
l = ["a", "b", "c", "d", "e"] print(l[1:3]) # インデックス2から4までの要素を取り出す。 >> ['b', 'c'] |
インデックス1から2までの要素を取り出しましたね。
また、スライス前後は省略もできます。
1 2 3 4 5 |
l = ["a", "b", "c", "d", "e"] print(l[3:]) # インデックス3から最後までの要素を取り出す。 >> ['d', 'e'] |
1 2 3 4 5 |
l = ["a", "b", "c", "d", "e"] print(l[:3]) # 先頭から3つの要素を取り出す。 >> ['a', 'b', 'c'] |
また、ステップ数を書くことで任意の要素を取り出すことができます。
1 2 3 4 5 |
l = ["a", "b", "c", "d", "e"] print(l[::2]) # 先頭から偶数番目の要素を取り出す。 >> ['a', 'c', 'e'] |
区切り文字で区切られた文字列をリストに変換する
split()メソッドを使うと変換できます。文字列の時同様、()デフォルトのときは、空白に対して変換されます。
1 2 3 4 5 6 7 |
s = "A B C" l=s.split() print(l) >> ['A', 'B', 'C'] |
リストの要素を検索する
指定した要素がリストに存在するかどうかを調べることができます。
in演算子を使います。文字列の時に行ったのと同じです。
しかし、リストに関しては、find()メソッドは使用できません。
1 2 3 4 5 |
l = ["a", "b", "c", "d", "e"] 'a' in l >> True |
1 2 3 4 5 |
l = ["a", "b", "c", "d", "e"] print(l.find("a")) >> AttributeError: 'list' object has no attribute 'find' |
index()メソッドでインデックスを求める
find()メソッドが使えないので、インデックスを求めることができません。
そこでリストクラスで与えられているのが、index()メソッドです。
先ほどの例を修正してみましょう。
1 2 3 4 5 |
l = ["a", "b", "c", "d", "e"] print(l.index("a")) >> 0 |
インデックスが見つからない場合は、ValueErrorが返ります。
リストの要素を変更する
リストは各インデックス単位で要素を変更することができます。
存在しないインデックスを指定した時は、IndexErrorを返します。
1 2 3 4 5 6 7 |
n=["A","B","C"] n[1]="AAA" print(n) >> ['A', 'AAA', 'C'] |
リストの最後に要素を加える
リストの最後に要素を加えたい時、append()メソッドを利用します。
append()は、リストの入れ子もできてしまいます。
1 2 3 4 5 6 7 8 9 |
l=[] l.append("A") l.append(["B","C","D"]) print(l) >> ['A', ['B', 'C', 'D']] |
この場合、リストは2つの要素を持つことになり、
1 2 3 4 5 6 7 |
print(l[0]) >> ['A'] print(l[1]) >> ['B', 'C', 'D'] |
このようにアクセスします。
また、[‘B’, ‘C’, ‘D’] はどうやってアクセスするのかというと
下記のように操作すればアクセスできます。
1 2 3 |
print(l[1][2]) >> D |
要素を削除したい
remove()メソッド
リストから指定した値の要素を削除するには、remove()メソッドを使います。
注意すべきことは、remove()メソッドは、引数と一致した最初の要素を削除します。したがって、要素が複数ある場合、2番目以降は削除されないので注意しましょう。
del文
インデックスを指定して削除するという方法も用意されています。
1 2 3 4 5 6 7 |
l = ["a", "b", "c", "d", "e"] del l[1] # "b" を削除する。 print(l) >> ['a', 'c', 'd', 'e'] |
想定通り、”b” が削除されました。
また、スライスを使って任意のインデックスを削除することも可能です。
1 2 3 4 5 6 7 |
l = ["a", "b", "c", "d", "e"] del l[1:3] print(l) >> ['a', 'd', 'e'] |
スライスの使い方と同じように使えます。
要素の順番を反転させたい
reverse()メソッドを使うことで、要素の順番を反転させることができます。
1 2 3 4 5 6 7 |
l = ["a", "b", "c", "d", "e"] l.reverse() print(l) >> ['e', 'd', 'c', 'b', 'a'] |
リストの要素の最大値・最小値・合計を求める
リストを扱うと時には、最大値や最小値、合計など求めたくなることもあるでしょう。下記で紹介する関数を利用すると簡単に求めれることができます。
max関数
max関数は、リストの要素の最大値を返します。
1 2 3 4 5 |
l = [1, 2, 3, 4, 5] print(max(l)) >> 5 |
min関数
min関数は、リストの要素の最小値を返します。
1 2 3 4 5 |
l = [1, 2, 3, 4, 5] print(min(l)) >> 1 |
sum関数
sum関数は、リストの要素の合計値を返します。
1 2 3 4 5 |
l = [1, 2, 3, 4, 5] print(sum(l)) >> 15 |
エクセル操作と同じような感覚で出来るんじゃないでしょうか?
リストの要素をソートしたい
リストクラスのメソッドとして、sort()メソッドがあります。
1 2 3 4 5 6 7 |
l = [1, -1, 2, 3, 2, -3, 1, 2, 3, 4, 5] l.sort() print(l) >> [-3, -1, 1, 1, 2, 2, 2, 3, 3, 4, 5] |
ちなみに、ソートを逆順に表示もできます。reverseを使います。
1 2 3 4 5 6 7 |
l = [1, -1, 2, 3, 2, -3, 1, 2, 3, 4, 5] l.sort(reverse=True) print(l) >> [5, 4, 3, 3, 2, 2, 2, 1, 1, -1, -3] |
sort()メソッドの注意点は、 l.sort() の返し値は、 None であるということです。そのため上記のような例になっています。
また、並べ替えた要素を別のリストに生成して戻すという関数もあります。
sorted()関数です。使い方は以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 |
l1 = [1, -1, 2, 3, 2, -3, 1, 2, 3, 4, 5] l2 = sorted(l1) print(l1) print(l2) >> [1, -1, 2, 3, 2, -3, 1, 2, 3, 4, 5] # l1リスト >> [-3, -1, 1, 1, 2, 2, 2, 3, 3, 4, 5] # l2リスト |
Pythonおすすめ書籍
最初の2冊は初心者向けです。Effectiv Pythonはこの2冊を終えてから読むとかなりわかりやすく感動できると思います。
|
|
|