■ はじめに
https://dk521123.hatenablog.com/entry/2019/10/12/084943
の続き。 リストの記事が長くなったので、整理して分冊。 また、Pythonの資格の問題ででてきたスライスなど あまり使っていなかったものを整理。
Python に関する資格
https://dk521123.hatenablog.com/entry/2019/12/17/225829
目次
【1】間違えやすい文法 1)スライス 2)負のインデックス 3)リスト内包表記(List comprehensions) 【2】リスト・あれこれ 1)空リストの定義とその判定 2)ソート 3)要素のクローン 4)要素のカウント 5)合成(+) 6)分割(文字列⇒リスト) 7)join(リスト⇒文字列) 8)typing 9)reprlib 10)抽出と除外
【1】間違えやすい文法
1)スライス
[start:end:step] のように値が指定できる
例1
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(a[2:8]) # [2, 3, 4, 5, 6, 7] print(a[:5]) # [0, 1, 2, 3, 4] print(a[5:]) # [5, 6, 7, 8, 9] print(a[2:8:2]) # [2, 4, 6]
例2
values = "Hello World!!!" print(values[:5]) print(values[6:11]) # 出力結果 # Hello # World
https://qiita.com/okkn/items/54e81346d8f35733ab5e
2)負のインデックス
* 後ろから数えて何番目かという指定になる
例
a = [1, 2, 3, 4, 5, 6, 7, 8, 9] print(a[-1]) # 9 print(a[-2]) # 8
3)リスト内包表記(List comprehensions)
サンプル
# ↓のような書き方を「リスト内包表記(List comprehensions)」という list = [x**2 for x in range(10)] print(list) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] # ネストも可能 list2 = [(x, y) for x in range(2) for y in range(3)] print(list2) # (0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
【2】リスト・あれこれ
1)空リストの定義とその判定
サンプル
empty1_list = [] # [] と表示 print(empty1_list) if not empty1_list: print("リストは空です") empty2_list = list() print(empty2_list) if len(empty2_list) == 0: print("リストは空ですYO") if empty2_list == []: print("リストは空ですYOYO")
https://qiita.com/yonedaco/items/d0f65ca3dad2e085a51d
2)ソート
サンプル
# sort() : 中身そのものがソートする number = [1,5,3,4,2] number.sort() print(number) # [1, 2, 3, 4, 5]が出力される。 # sorted() : 変数の中身そのものは変更しない number = [1,5,3,4,2] print(sorted(number)) # [1, 2, 3, 4, 5]が出力される。 print(number) # [1, 5, 3, 4, 2]が出力される。 # 昇順/降順 print(sorted(words, reverse=True)) print(sorted(words, reverse=Flase))
補足:辞書リストのソート
以下の関連記事の「■ 辞書リストをソートする」を参照のこと
https://dk521123.hatenablog.com/entry/2019/10/27/100014
3)要素のクローン
* [:]で行う
サンプル
fruits_clone = fruits[:]
4)要素のカウント
サンプル
name_list = ['Tom', 'Sam', 'Mike', 'Sam', 'Kevin', 'Sam', 'Mike', 'Sam',] # count('【カウントしたい要素内容】') print(name_list.count('Mike')) # 2
5)合成(+)
* リスト同士で「+」することができる
サンプル
first_list = [1, 2, 3] second_list = [4, 5, 6] total_list = first_list + second_list # [1, 2, 3, 4, 5, 6] print(total_list)
6)分割(文字列⇒リスト)
* split("【区切り文字】")を使う
サンプル
hello = "Hello World !!" print(hello.split(" ")) # ['Hello','World','!!']が出力される。
7)join(リスト⇒文字列)
list = ['Mike', 'Tom', 'Sam'] result = '\n'.join(list) print(result)
出力結果例
Mike Tom Sam
8)typing
https://docs.python.org/ja/3/library/typing.html
* 何もしない状態では、 以下のようにListの中身の型を定義することはできない => 「from typing import List」を使えば大丈夫 * Typing モジュールに詳細は、以下の関連記事を参照のこと。
https://dk521123.hatenablog.com/entry/2021/12/23/231559
修正前(ダメな例・一部抜粋)
sample_list = [1, 3, 2, 5, 4] def print_list(sample_list: list[int]) -> None: # ここでエラー
修正後
from typing import List def print_list(sample_list: List[int]) -> None: for input in sample_list: print("input = {}".format(input)) if __name__ == '__main__': sample_list = [1, 3, 2, 5, 4] print_list(sample_list)
9)reprlib
* 出力文字列の長さを制限する => デバッグログとして使えるかも
https://docs.python.org/ja/3/library/reprlib.html
https://www.st-hakky-blog.com/entry/2017/11/28/144751
サンプル
import reprlib values = [i for i in range(10)] print(values) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(reprlib.repr(values)) # [0, 1, 2, 3, 4, 5, ...]
10)抽出と除外
* 別の方法としては、「filter / lambda」があるが そちらの詳細は、以下の関連記事を参照のこと
Python ~ 基本編 / ラムダ lambda ~
https://dk521123.hatenablog.com/entry/2019/09/23/000000
サンプル
target_list = [ "table1", "table2", "table3", "table4", "table1 -> table2", "table2 -> table3", "table2 -> table4" ] # 抽出 (in) list = [line for line in target_list if 'table3' in line] print(list) print('*******************') # 除外(not in) list = [line for line in target_list if 'table3' not in line] print(list)
参考文献
https://www.atmarkit.co.jp/ait/articles/1905/31/news015_2.html
関連記事
Python ~ 基本編 / リスト ~
https://dk521123.hatenablog.com/entry/2019/10/12/084943
Python ~ 基本編 / スライス操作 ~
https://dk521123.hatenablog.com/entry/2020/11/14/000000
Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251
Python ~ 基本編 / 型指定・Typing ~
https://dk521123.hatenablog.com/entry/2021/12/23/231559
Python ~ 基本編 / ラムダ lambda ~
https://dk521123.hatenablog.com/entry/2019/09/23/000000
Python に関する資格
https://dk521123.hatenablog.com/entry/2019/12/17/225829