【図解】Pythonの便利な組み込み関数10選

前回の記事が久しぶりに200いいねを超えて好評？だったので、今回は便利な組み込み関数を10個ご紹介します。

前回の記事はこちら

https://qiita.com/python_academia/items/df16e9aacec2f2e42c9f

前回と合わせてこれで20個紹介することになりますが、Pythonには組み込み関数が71個あります。

以下の書籍ですべて学ぶことができるので、興味のある方は是非チェックしてください。

https://zenn.dev/python_academia/books/94b58e7ef9fe42

https://zenn.dev/python_academia/books/e671d97f090c50

## range(start, stop)
range関数は連続した数値を要素として持ちます。

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638073/b7047369-5849-4195-8227-3d026992adb8.png width=80%>


~~~py:In
for i in range(0, 2):
    print(i)
~~~
~~~:Out 
0
1
~~~
~~~py:In
for i in range(3, 8):
    print(i)
~~~
~~~:Out
3
4
5
6
7
~~~
~~~py:In
for i in range(-2, 1):
    print(i)
~~~
~~~:Out
-2
-1
0
~~~

:::note alert
終端値は入らないので注意しましょう。
:::

## len(s)
オブジェクトの長さ (要素の数) を返します。引数はシーケンス (文字列、リスト、タプルなど) かコレクション (辞書、集合など) です。

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638073/c7f55c8c-bb96-4ad3-9d16-ea321f39c7c1.png width=70%>


### 文字列の長さを取得する
文字列の長さを取得します。
~~~py:In
str_len = "Python"
print(len(str_len))
~~~
~~~:Out
6
~~~

### リストの長さを取得する
リストの長さを取得します。
~~~py:In
list_len = [1, 2, 3]

print(len(list_len))
~~~
~~~:Out
3
~~~

### タプルの長さを取得する
タプルの長さを取得します。
~~~py:In
tuple_len = (1, 2, 3, 4)

print(len(tuple_len))
~~~
~~~:Out
4
~~~

### 辞書の長さを取得する
辞書の場合は、keyとvalueの組の数を取得します。

~~~py:In
dict_len = {'1': 'red', '2': 'yellow', '3': 'blue'}

print(len(dict_len))
~~~
~~~:Out
3
~~~

### 集合の長さを取得する
集合は重複している要素が削除されるので、削除された後の長さを取得します。

~~~py:In
set_len = {3, 1, 2, 3, 2, 1, 1, 4}

print(set_len)
print(len(set_len))
~~~
~~~:Out
{1, 2, 3, 4}
4
~~~

## max・min(iterable, *, key=None)

max・minはイテラブルの中で最大・最小の要素を返しますが、

~~~py:In
l = [4, 9, 15]

print(max(l))
print(min(l))
~~~
~~~:Out
15
4
~~~


key引数を指定することができます。
(key引数には引数を1つ取る順序関数を指定します。具体的にはintやlenを指定します。)

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638073/7be66271-1fe9-421f-a128-1a945b955545.png width=70%>


~~~py:In
l = ["4", "9", "15", "-125"]

print(max(l))
print(max(l, key=int))
print(max(l, key=len))

print(min(l))
print(min(l, key=int))
print(min(l, key=len))
~~~
~~~:Out
9
15
-125
-125
-125
4
~~~

:::note
`max・min(iterable, *, key=None)`の`*`は、`*`より後ろがキーワード専用引数であることを示します。
:::

## zip(*iterables)

ループ処理で使えるテクニックの1つにzip関数があります。zip関数は反復可能オブジェクトの各要素をひと組にすることができます。

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638073/e8124931-69bf-40af-912f-f76e03042595.png width=70%>


~~~py:In
nums = [1, 2, 3]
values = ['Python', 'Java', 'C++']

for num, color in zip(nums, values):
   print(num, color)
~~~
~~~:Out
1 Python
2 Java
3 C++
~~~

## map(function, iterable)
関数をイテラブルの全ての要素に適用して結果を生成するイテレータを返します。

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638073/568a8597-f848-41fa-b4eb-28841b1139fb.png width=70%>

~~~py:In
l = ["1", "2", "3"]

map_iterator = map(int, l)

for i in map_iterator:
    print(i)
~~~
~~~:Out
1
2
3
~~~

## help()
この関数は対話的に使用します。
インタープリタに`help()`と入力すると、ヘルプシステムが起動します。
![b2781fe89635-20241101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638073/2966ffc0-12b1-4589-880e-5581b3533d04.png)


入力を促されるので、試しに`for`と入力します。

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638073/9afdf1b0-93eb-44d7-a13b-c2cfec2f7f6b.png width=70%>



for文に関する説明が出力されます。
`help("for")`と入力しても同じ出力結果を得ることができます。

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638073/213a994a-def0-4411-a900-ec56c950b092.png width=70%>


`modules`や`keywords`と入力すると、その一覧が表示されます。

![f33c07d752dd-20241101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638073/1b3a1b69-c09e-4cf8-970f-06655c871154.png)


`modules spam`と入力すると、名前または概要に`spam`が含まれるモジュールリストが出力されます。

![224bc08d1994-20241101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638073/cbbf3c8c-0b5e-43d6-aef1-e938f3402d21.png)



## sorted(iterable, key=None)

keyには1引数関数を指定します。これは比較を行う前にリストの各要素に対して呼び出される関数です。

~~~py:In
print(sorted("This is a test string from Python Academia".split()))
print(sorted("This is a test string from Python Academia".split(), key=str.lower))
~~~
~~~:Out
['Academia', 'Python', 'This', 'a', 'from', 'is', 'string', 'test']
['a', 'Academia', 'from', 'is', 'Python', 'string', 'test', 'This']
~~~
:::note info
ソートは安定(stable)であることが保証されています。これは同じ要素がある場合、元々の順序が維持されるということを意味します。
:::

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638073/7c26bd57-4aa9-4c70-b916-86f04ee9df64.png width=50%>

~~~py:In
data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]

print(sorted(data, key=lambda d: d[0]))
~~~
~~~:Out
[('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]
~~~


## issubclass(class, classinfo)
classがclassinfoのサブクラス（子クラス、派生クラス）である場合に`True`を返します。

:::note info
継承元のクラスを基底クラス・親クラスなどと呼び、継承先のクラスを派生クラス・子クラスなどと呼びます。

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638073/da666d80-8797-45e9-8d13-2adfc20282d6.png width=70%>


:::

~~~py
class BaseClass():
    pass

class SubClass(BaseClass):
    pass

class SubSubClass(SubClass):
    pass
~~~

~~~py:In
print(issubclass(SubClass, BaseClass))
~~~
~~~:Out
True
~~~


## isinstance(object, classinfo)
object引数がclassinfo引数に指定した型のインスタンスである場合に`True`を返します。

:::note info
インスタンスとはクラスを使って実際に作った物を言います。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638073/0a5d5220-68c8-4a7a-93a4-af4bcee88a46.png width=80%>


:::

~~~py:In
print(isinstance(1, int))
print(isinstance("string", int))
~~~
~~~:Out
True
False
~~~

## おわり
最後までお読みいただきありがとうございました。
Pythonのコードをより効率的に書くためにも、
便利な組み込み関数を使いこなしていきましょう！