Python(パイソン)では「型(タイプ)」がとても重要です。
文字列・整数・リストなど、さまざまな型が存在し、それぞれに特徴があります。
ですが、実際の開発では「数値を文字列に変えたい」「文字列をリストに分解したい」といった型変換が頻繁に必要になります。
この記事では、Pythonにおける基本的な型変換の方法と注意点を、初心者にもわかりやすく解説します。
型とは何か?

型の基本概念
型とは、値が持つデータの種類のことです。
身近な例で考えてみよう:
- 本には「小説」「辞書」「写真集」などの種類がある
- 食べ物には「野菜」「肉」「果物」などの種類がある
- データにも「数字」「文字」「記号」などの種類がある
この「データの種類」がPythonでは「型」と呼ばれます。
Pythonの主要な型
型名 | 英語名 | 説明 | 例 |
---|---|---|---|
整数 | int | 小数点がない数字 | 123 , -5 , 0 |
小数 | float | 小数点がある数字 | 3.14 , -2.5 , 0.0 |
文字列 | str | 文字の集まり | "Python" , 'こんにちは' |
真偽値 | bool | 正しいか間違いか | True , False |
リスト | list | データの集まり | [1, 2, 3] , ['a', 'b'] |
型を確認する方法
# type()関数で型を確認できる
print(type(123)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("Python")) # <class 'str'>
print(type(True)) # <class 'bool'>
print(type([1, 2, 3])) # <class 'list'>
型が重要な理由
# 同じ「+」でも、型によって動作が変わる
print(1 + 2) # 3(数値の足し算)
print("1" + "2") # "12"(文字列の結合)
# これはエラーになる
# print(1 + "2") # TypeError: 異なる型は計算できない
問題: 数字と文字列を一緒に計算したい場合はどうする? 解決: 型変換を使って、同じ型に揃える!
この章のまとめ
型はPythonの基本中の基本です。次は、それぞれの型への変換方法を具体的に見ていきましょう。
よく使う型変換一覧
型変換とは?
型変換とは、あるデータを別の型に変えることです。
身近な例:
- 漢数字「三」を算用数字「3」に変える
- ローマ字「san」をひらがな「さん」に変える
- データも同じように「”123″」を
123
に変える
基本的な変換関数
変換先 | 関数名 | 使用例 | 結果 |
---|---|---|---|
整数 | int() | int("100") | 100 |
小数 | float() | float("3.14") | 3.14 |
文字列 | str() | str(123) | "123" |
リスト | list() | list("abc") | ['a', 'b', 'c'] |
真偽値 | bool() | bool(0) | False |
詳しい変換例
1. int():整数への変換
# 文字列から整数へ
print(int("123")) # 123
print(int("-456")) # -456
# 小数から整数へ(小数部分は切り捨て)
print(int(3.14)) # 3
print(int(9.99)) # 9
# 真偽値から整数へ
print(int(True)) # 1
print(int(False)) # 0
2. float():小数への変換
# 文字列から小数へ
print(float("3.14")) # 3.14
print(float("123")) # 123.0
# 整数から小数へ
print(float(42)) # 42.0
# 真偽値から小数へ
print(float(True)) # 1.0
print(float(False)) # 0.0
3. str():文字列への変換
# 数値から文字列へ
print(str(123)) # "123"
print(str(3.14)) # "3.14"
# 真偽値から文字列へ
print(str(True)) # "True"
print(str(False)) # "False"
# リストから文字列へ
print(str([1, 2, 3])) # "[1, 2, 3]"
4. list():リストへの変換
# 文字列からリストへ(1文字ずつ分解)
print(list("Python")) # ['P', 'y', 't', 'h', 'o', 'n']
print(list("こんにちは")) # ['こ', 'ん', 'に', 'ち', 'は']
# range()からリストへ
print(list(range(5))) # [0, 1, 2, 3, 4]
5. bool():真偽値への変換
# 数値から真偽値へ(0だけがFalse、それ以外はTrue)
print(bool(0)) # False
print(bool(1)) # True
print(bool(-1)) # True
print(bool(100)) # True
# 文字列から真偽値へ(空文字だけがFalse)
print(bool("")) # False
print(bool("Python")) # True
print(bool(" ")) # True(空白も文字)
# リストから真偽値へ(空リストだけがFalse)
print(bool([])) # False
print(bool([1, 2])) # True
注意点
変換できない場合はエラーになります:
# これらはエラーになる
# int("abc") # ValueError: 文字が数字でない
# float("hello") # ValueError: 文字が数字でない
# list(123) # TypeError: 整数はイテラブルでない
この章のまとめ
標準の変換関数を使えば、型を簡単に変えることができます。次は、実践的な使い方を例で紹介します。
実践!型変換の使い方

実例1:ユーザー入力の処理
# input()は必ず文字列を返すので、数値計算には変換が必要
age_str = input("年齢を入力してください: ") # "25" と入力
age = int(age_str) # 文字列を整数に変換
# 計算ができるようになる
next_year_age = age + 1
print(f"来年は{next_year_age}歳ですね")
実例2:価格計算(文字列→数値)
# 商品価格の計算
price_str = "300" # 文字列として保存されている価格
tax_rate = 0.1 # 消費税率
# 文字列を数値に変換してから計算
price = int(price_str)
total = price * (1 + tax_rate)
print(f"税込価格: {total}円") # 税込価格: 330.0円
実例3:メッセージ作成(数値→文字列)
# 数値を文字列に変換してメッセージを作成
age = 25
score = 95
# 方法1:str()を使って結合
message1 = "私は" + str(age) + "歳で、テストは" + str(score) + "点でした"
print(message1)
# 方法2:f文字列を使う(推奨)
message2 = f"私は{age}歳で、テストは{score}点でした"
print(message2)
実例4:文字列の分解(文字列→リスト)
# 文字列を1文字ずつリストに分解
word = "Python"
char_list = list(word)
print(char_list) # ['P', 'y', 't', 'h', 'o', 'n']
# 各文字を処理
for i, char in enumerate(char_list):
print(f"{i+1}文字目: {char}")
実例5:CSVデータの処理
# カンマ区切りの文字列を処理
csv_data = "太郎,25,東京"
# split()でリストに分割
data_list = csv_data.split(",")
print(data_list) # ['太郎', '25', '東京']
# 必要に応じて型変換
name = data_list[0] # 文字列のまま
age = int(data_list[1]) # 文字列を整数に変換
city = data_list[2] # 文字列のまま
print(f"名前: {name}, 年齢: {age}, 住所: {city}")
実例6:真偽値の活用
# ユーザー設定の処理
settings = {
"notifications": "1", # 文字列で保存
"dark_mode": "0", # 文字列で保存
}
# 文字列を真偽値に変換
notifications_on = bool(int(settings["notifications"]))
dark_mode_on = bool(int(settings["dark_mode"]))
print(f"通知: {notifications_on}") # True
print(f"ダークモード: {dark_mode_on}") # False
実例7:リストから文字列への変換
# リストの要素を結合して文字列にする
fruits = ["りんご", "バナナ", "みかん"]
# join()を使って結合
result1 = ", ".join(fruits)
print(result1) # "りんご, バナナ, みかん"
# 数値のリストの場合は、まず文字列に変換
numbers = [1, 2, 3, 4, 5]
str_numbers = [str(num) for num in numbers] # リスト内包表記
result2 = "-".join(str_numbers)
print(result2) # "1-2-3-4-5"
この章のまとめ
実際の開発では、複数の型変換を組み合わせて使うことが多いです。次は、型変換の落とし穴について紹介します。
型変換でよくあるエラーと対策

よくあるエラーパターン
エラー1:数字でない文字列を数値に変換
# ❌ エラーになる例
user_input = "abc"
# number = int(user_input) # ValueError が発生
# ✅ 対策1:事前チェック
user_input = "abc"
if user_input.isdigit():
number = int(user_input)
else:
print("数字を入力してください")
number = 0
print(number) # 0
エラー2:小数点の表記ミス
# ❌ エラーになる例
# float("10,5") # ValueError: カンマは使えない
# float("10.5.5") # ValueError: 小数点が複数
# ✅ 対策:文字列を修正してから変換
price_str = "1,250.50" # カンマ付きの価格
clean_price = price_str.replace(",", "") # カンマを削除
price = float(clean_price)
print(price) # 1250.5
エラー3:リスト変換の失敗
# ❌ エラーになる例
# list(123) # TypeError: 整数はイテラブルでない
# ✅ 対策:適切なデータ型を使用
number = 123
# 数字を1桁ずつリストにしたい場合
digits = [int(d) for d in str(number)]
print(digits) # [1, 2, 3]
# 数字を要素とするリストを作りたい場合
number_list = [number]
print(number_list) # [123]
安全な型変換の方法
1. try-except構文を使う
def safe_int_conversion(value):
"""安全に整数変換を行う関数"""
try:
return int(value)
except ValueError:
print(f"'{value}' は整数に変換できません")
return 0
except TypeError:
print(f"'{value}' は変換できない型です")
return 0
# テスト
print(safe_int_conversion("123")) # 123
print(safe_int_conversion("abc")) # 0(エラーメッセージ付き)
print(safe_int_conversion([1, 2])) # 0(エラーメッセージ付き)
2. デフォルト値を設定する
def convert_with_default(value, target_type, default):
"""デフォルト値付きの型変換"""
try:
return target_type(value)
except (ValueError, TypeError):
return default
# 使用例
age = convert_with_default("25", int, 0) # 25
age = convert_with_default("abc", int, 0) # 0
price = convert_with_default("3.14", float, 0.0) # 3.14
3. バリデーション関数を作る
def validate_and_convert(value, target_type):
"""値を検証してから変換"""
if target_type == int:
if isinstance(value, str) and value.isdigit():
return int(value)
elif isinstance(value, (int, float)):
return int(value)
elif target_type == float:
try:
return float(value)
except (ValueError, TypeError):
pass
elif target_type == str:
return str(value)
# 変換できない場合
raise ValueError(f"'{value}' を {target_type.__name__} に変換できません")
# 使用例
try:
result = validate_and_convert("123", int)
print(result) # 123
except ValueError as e:
print(e)
実用的なエラー処理例
ユーザー入力の処理
def get_user_age():
"""ユーザーから年齢を安全に取得"""
while True:
age_input = input("年齢を入力してください: ")
try:
age = int(age_input)
if age < 0:
print("年齢は0以上で入力してください")
continue
elif age > 150:
print("年齢は150以下で入力してください")
continue
return age
except ValueError:
print("数字で入力してください")
# 使用例
# user_age = get_user_age()
# print(f"あなたは{user_age}歳ですね")
ファイル読み込みでの型変換
def process_score_file(filename):
"""点数ファイルを読み込んで処理"""
scores = []
try:
with open(filename, 'r', encoding='utf-8') as file:
for line_num, line in enumerate(file, 1):
line = line.strip()
if not line: # 空行をスキップ
continue
try:
score = float(line)
if 0 <= score <= 100:
scores.append(score)
else:
print(f"行{line_num}: {score} は範囲外です(0-100)")
except ValueError:
print(f"行{line_num}: '{line}' は数値ではありません")
except FileNotFoundError:
print(f"ファイル '{filename}' が見つかりません")
return []
return scores
# 使用例
# scores = process_score_file('scores.txt')
# if scores:
# print(f"平均点: {sum(scores) / len(scores):.1f}")
この章のまとめ
型変換は非常に便利ですが、誤って使うとエラーの原因になります。安全に扱うための工夫も覚えておきましょう。
応用テクニック
複数の型変換を組み合わせる
1. データクリーニング
def clean_and_convert_data(data_list):
"""汚いデータをクリーニングして変換"""
cleaned_data = []
for item in data_list:
# 文字列に変換
item_str = str(item).strip()
# 空文字や None をスキップ
if not item_str or item_str.lower() == 'none':
continue
# 数値として解釈できるかチェック
try:
# 整数として解釈
if '.' not in item_str:
cleaned_data.append(int(item_str))
else:
# 小数として解釈
cleaned_data.append(float(item_str))
except ValueError:
# 文字列として保持
cleaned_data.append(item_str)
return cleaned_data
# テスト
messy_data = [" 123 ", "45.6", "hello", "", None, "789"]
clean_data = clean_and_convert_data(messy_data)
print(clean_data) # [123, 45.6, 'hello', 789]
2. 設定ファイルの処理
def parse_config(config_text):
"""設定テキストを解析して適切な型に変換"""
config = {}
for line in config_text.strip().split('\n'):
if '=' not in line or line.startswith('#'):
continue
key, value = line.split('=', 1)
key = key.strip()
value = value.strip()
# 型の推定と変換
if value.lower() in ('true', 'false'):
config[key] = value.lower() == 'true'
elif value.isdigit():
config[key] = int(value)
elif value.replace('.', '').isdigit() and value.count('.') == 1:
config[key] = float(value)
else:
config[key] = value
return config
# テスト
config_text = """
# アプリケーション設定
debug=true
port=8080
host=localhost
timeout=30.5
"""
config = parse_config(config_text)
print(config)
# {'debug': True, 'port': 8080, 'host': 'localhost', 'timeout': 30.5}
カスタム変換関数
日本語数字の変換
def japanese_to_int(japanese_num):
"""日本語の数字を整数に変換"""
conversion_map = {
'一': 1, '二': 2, '三': 3, '四': 4, '五': 5,
'六': 6, '七': 7, '八': 8, '九': 9, '十': 10,
'百': 100, '千': 1000, '万': 10000
}
if japanese_num in conversion_map:
return conversion_map[japanese_num]
# より複雑な変換ロジックをここに実装
# 簡単な例として「十五」→ 15 の変換
if japanese_num == '十五':
return 15
return None
# テスト
print(japanese_to_int('五')) # 5
print(japanese_to_int('十')) # 10
print(japanese_to_int('十五')) # 15
パフォーマンス最適化
大量データの効率的な変換
import time
def compare_conversion_methods():
"""異なる変換方法のパフォーマンス比較"""
data = ['123', '456', '789'] * 100000 # 30万件のデータ
# 方法1:通常のfor文
start = time.time()
result1 = []
for item in data:
result1.append(int(item))
time1 = time.time() - start
# 方法2:リスト内包表記
start = time.time()
result2 = [int(item) for item in data]
time2 = time.time() - start
# 方法3:map関数
start = time.time()
result3 = list(map(int, data))
time3 = time.time() - start
print(f"for文: {time1:.3f}秒")
print(f"リスト内包表記: {time2:.3f}秒")
print(f"map関数: {time3:.3f}秒")
# compare_conversion_methods()
まとめ
重要ポイント
Pythonの型変換は、データ処理に欠かせないテクニックです。
int()
,float()
,str()
などの標準関数で変換できる- 実際のコードで組み合わせて活用する
- エラー対策も忘れずに
- 安全な変換のためにtry-except構文を活用
型変換のベストプラクティス
1. 適切な関数を選ぶ
目的 | 推奨方法 | 理由 |
---|---|---|
文字列→整数 | int() | 最も直接的 |
文字列→小数 | float() | 精度を保持 |
数値→文字列 | str() または f文字列 | 読みやすい |
文字列→リスト | list() または split() | 用途に応じて |
2. エラーハンドリングを忘れない
# ❌ 悪い例
def bad_conversion(value):
return int(value) # エラーが起きる可能性
# ✅ 良い例
def good_conversion(value, default=0):
try:
return int(value)
except (ValueError, TypeError):
return default
3. 可読性を重視する
# ❌ 悪い例(何をしているかわからない)
result = str(int(float(input())))
# ✅ 良い例(段階的で理解しやすい)
user_input = input("数値を入力: ")
number_float = float(user_input)
number_int = int(number_float)
result = str(number_int)
覚えておきたい型変換パターン
よく使う変換
- ユーザー入力の処理:
input()
→int()
またはfloat()
- メッセージ作成:数値 →
str()
→ 文字列結合 - データファイル処理:文字列 → 適切な型
- 設定値の処理:文字列 →
bool()
注意が必要な変換
- 文字列→数値:無効な文字列でエラー
- 小数→整数:情報の損失
- リスト→文字列:
join()
を使う - None値の処理:事前チェック必須
コメント