・IT/Web系エンジニアの経験者の方
・どこの転職エージェントを利用しようか迷っている方
それなら、キッカケエージェントにご相談!
キッカケエージェントでは、少数精鋭のエージェントが、エンジニアの経験やスキル、志向性などをカウンセリングし、的確なアドバイスを提供します!
また、徹底した企業へのヒアリングにより、最適なマッチングを実現し、今では内定率が一般的なエージェントの2倍以上となっています!
転職エージェントに迷っている方、まずは無料でキャリア相談から!
Pythonで値の絶対値を取得するにはabs()使用します。
abs()とは絶対値を求める関数であり、指定した値の絶対値を取得することができます。
しかし、値が文字列の場合は絶対値を取得することはできませんので注意してください。
また、繰り返し処理内で使用することで、リストに格納された値の絶対値を一気に求めることもできます。
Pythonをインストールしていればすぐに使用できるため、もし値の絶対値を取得したいと思った場合はabs()を使用しましょう。
今回はPythonのabs()で絶対値を求める方法について基本から応用までご紹介していきます。
指定した値の絶対値を求めたい場合
abs()とは
abs()とは、絶対値を求める関数になります。
そもそも、絶対値とは0からの距離を表す値のことをいいます。
そのため、符号が違っても同じ数字であれば絶対値は同じになります。
abs()の書き方
abs()の書き方は下記のようになります。
1 | abs("対象の値") |
abs()と記載し、括弧に必須のパラメータを1つ指定することで使用することができます。
abs()のパラメータ
abs()のパラメータは下記のようになります。
- 対象の値:(必須)
絶対値を求めるための値を指定する。
abs()は必須なパラメータをとして「対象の値」を指定します。
abs()の返り値
abs()の返り値は対象の値の絶対値となります。
abs()の基本的な使い方
abs()で絶対値を求めるサンプルコードをご紹介します。
ここでは下記の3パターンに対して使用します。
- 対象の値が数値である場合
- 対象の値が文字列である場合
- 対象の値が真偽値である場合
対象の値が数値である場合
対象の値が数値である場合にabs()を使用すると絶対値を返します。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | print('● 対象の数値-1') num1 = 13 print(num1) print("● abs()使用後-1") print(abs(num1)) print('● 対象の数値-2') num2 = -15 print(num2) print("● abs()使用後-2") print(abs(num2)) print('● 対象の数値-3') num3 = -12.987 print(num3) print("● abs()使用後-3") print(abs(num3)) |
実行結果
abs()で指定した値の絶対値を取得しています。
そのため、下記のように表示されています。
- 「13」の絶対値は「13」
- 「-15」の絶対値は「15」
- 「-12.987」の絶対値は「12.987」
対象の値が文字列である場合
対象の値が文字列である場合にabs()を使用するとエラーが発生します。
● main.py
1 2 3 4 5 6 | print('● 対象の文字列') str1 = 'abs' print(str1) print("● abs()使用後") print(abs(str1)) |
実行結果
abs()で指定した値の絶対値を取得しています。
今回は文字列を指定した為、エラーが発生しています。
対象の値が真偽値である場合
対象の値が真偽値である場合にabs()を使用すると「0」か「1」が返されます。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 | print('● 対象の真偽値-1') bl1 = True print(bl1) print("● abs()使用後-1") print(abs(bl1)) print('● 対象の真偽値-2') bl2 = False print(bl2) print("● abs()使用後-2") print(abs(bl2)) |
実行結果
abs()で真偽値の絶対値を取得しています。
そのため、下記のように表示されています。
- 「True」の絶対値は「1」
- 「False」の絶対値は「0」
abs()で複数の値の絶対値を一気に取得する場合
abs()で複数の値の絶対値を一気に取得するには、繰り返し処理を使用します。
絶対値を求めたい値をリストに格納し、繰り返し処理内でabs()使用することで複数の値の絶対値を一気に求めることができます。
● main.py
1 2 3 4 5 6 7 | print('● 対象の値') abs_list = [12, -3.45, 999, -93, True, False] print(abs_list) print("● abs()使用後") for abs_item in abs_list: print(abs(abs_item)) |
実行結果
abs()で複数の値の絶対値を一気に取得しています。
そのため、下記のような結果となって表示されています。
- 「12」の絶対値は「12」
- 「-3.45」の絶対値は「3.45」
- 「999」の絶対値は「999」
- 「-93」の絶対値は「93」
- 「True」の絶対値は「1」
- 「False」の絶対値は「0」
abs()の応用的な使い方
先ほどまでabs()で指定した数値の絶対値を取得していましたが、複雑な数値の絶対値を取得する応用な使い方ができます。
そのため、ここではabs()の応用的な使い方についてご紹介します。
対象の値が無限大である場合
abs()を無限大の値に対して使用すると、「inf」を返します。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 | print('● 対象の無限大-1') abs_inf1 = float('inf') print(abs_inf1) print("● abs()使用後-1") print(abs(abs_inf1)) print('● 対象の無限大-2') abs_inf2 = -float('inf') print(abs_inf2) print("● abs()使用後-1") print(abs(abs_inf2)) |
実行結果
abs()で無限大の絶対値を取得しています。
そのため、下記のような結果となって表示されています。。
- 「正の無限大」の絶対値は「inf」
- 「負の無限大」の絶対値は「inf」
対象の値が複素数である場合
abs()を複素数の値に対して使用すると、平方根で計算した値を返します。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 | print('● 対象の複素数-1') abs_comp1 = 4 + 8j print(abs_comp1) print("● abs()使用後-1") print(abs(abs_comp1)) print('● 対象の複素数-2') abs_comp2 = -3 + 4j print(abs_comp2) print("● abs()使用後-2") print(abs(abs_comp2)) |
実行結果
abs()で複素数の値の絶対値を取得しています。
そのため、下記のような結果となって表示されています。。
- 「4 + 8j」の絶対値は「8.94427190999916」
- 「-3 + 4j」の絶対値は「5」
abs()を使用した実際のケース
abs()を使用した実際のケースについてご紹介します。
例えば、abs()を使用して1か月の最高平均気温から一番差がある日付を求めるような処理を作成します。
flask
● index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <!DOCTYPE html> <html lang="ja"> <head> <title>abs()で絶対値を取得</title> <meta charset="utf-8"/> </head> <body> <h1>東京の気温</h1> <div class= "mon-table"> {% for date, temp in lists: %} <div id = "{{ temp }}" class ="date-cell">{{ date }} <p>{{ temp }}</p> </div> {% endfor %} </div> <form action="/" method="POST"> <button type="submit">結果</button> </form> </body> <style> .mon-table { border: 1px solid; display: flex; flex-wrap: wrap; width: 625px; } .date-cell { border: 1px solid; width: 100px; margin: 1px; text-align: center; } </style> </html> |
● result.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <!DOCTYPE html> <html lang="ja"> <head> <title>abs()で絶対値を取得</title> <meta charset="utf-8"/> </head> <body> <h1>東京の気温</h1> <div class= "mon-table"> {% for date, temp in lists: %} <div id = "{{ temp }}" class ="date-cell">{{ date }} <p>{{ temp }}</p> </div> {% endfor %} </div> </body> <style> .mon-table { border: 1px solid; display: flex; flex-wrap: wrap; width: 625px; } .date-cell { border: 1px solid; width: 100px; margin: 1px; text-align: center; } .accent-val { background:tomato; } </style> <script> window.addEventListener('load', function() { let max_temp = document.getElementById('{{ temp_ret }}') max_temp.classList.add('accent-val') }) </script> </html> |
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | from flask import Flask, render_template import requests import json app = Flask(__name__) API_URL = f'https://api.open-meteo.com/v1/forecast?latitude=35.6785&longitude=139.6823&daily=temperature_2m_max&timezone=Asia%2FTokyo&past_days=31&forecast_days=1' headers = {"content-type": "application/json"} response = requests.get(API_URL, headers=headers) data = response.json() daily = data['daily'] date_list = daily['time'] temp_list = daily['temperature_2m_max'] @app.route('/') def index(): return render_template('index.html', lists = zip(date_list, temp_list)) @app.route('/', methods=['POST']) def index2(): temp_sum = 0 day_cnt = len(temp_list) for tempA in temp_list: temp_sum = temp_sum + tempA temp_ave = round(temp_sum / day_cnt, 1) def abs_diff(tempB): temp_diff = abs(tempB - temp_ave) return temp_diff temp_diff_list = list(map(abs_diff, temp_list)) temp_diff_max = max(temp_diff_list) temp_idx = list(temp_diff_list).index(temp_diff_max) temp = temp_list[temp_idx] return render_template('index2.html', lists = zip(date_list, temp_list), temp_ret = str(temp)) if __name__ == '__main__': app.run() |
実行結果(登録成功時)
abs()で1か月の平均気温から一番差がある日付を求めています。
今回は下記のような処理を行い、その中でabs()を使用しています。
- requestsで過去1ヶ月の最高気温のデータをリストをAPIで取得。
- 受け取った最高気温のデータから最高平均気温を計算。
- 最高平均気温からそれぞれの最高気温を引き、abs()にて絶対値を取得したリストを作成。
- 絶対値のリストにmax()とindex()を使用して、一番差がある日付のインデックスを取得。
- APIリストに先ほど取得したインデックスを指定して最高気温を取得。
(HTML要素のidとして渡すため)
今回は符号有による数値の比較を避けたいため、abs()にて符号を無くして数値の比較を行っています。
そのため、「結果」を押すと、1ヶ月の最高平均気温から一番離れている「2024/04/24」の色が赤色に変化しています。
絶対値を取得する他の方法
Pythonで絶対値を取得する他の方法としてmath.fabs()があります。
math.fabs()とは、mathクラスで準備されている絶対値を求める関数となります。
そのため、返り値は絶対値になりますが、全て浮動小数点数型になります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import math print('● 対象の数値-1') num1 = 13 print(num1) print("● abs()使用後-1") print(math.fabs(num1)) print('● 対象の数値-1') num2 = -13.456 print(num2) print("● abs()使用後-2") print(math.fabs(num2)) |
実行結果
math.fabs()で指定した値の絶対値を取得しています。
そのため、下記のように表示されています。
- 「13」の絶対値は「13.0」
- 「-13.456」の絶対値は「13.456」
まとめ
● abs()とは指定した値の絶対値を求めることができる関数である。
● abs()を使用するには下記のパラメータを指定する。
対象の値:必須
● 数値に対してabs()を使用すると、指定した値の絶対値を返す。
● 文字列に対してabs()を使用すると、エラーが発生する。
● 真偽値に対してabs()を使用すると、指定した値の絶対値を返す。
(「TRUE」だと「1」、「FALSE」だと「0」を返す。)
● abs()で複数の値の絶対値を一気に求める場合は繰り返し処理を使用する。
● 複素数の値に対してabs()を使用すると、指定した複素数の絶対値を返す。
(平方根で計算した値が絶対値になる。)
● 無限大の値に対してabs()を使用すると、指定した無限大の絶対値を返す。
● abs()以外で絶対値を取得する方法としてmath.fabs()がある。
(返り値が全て浮動小数点数となる。)