Tutorial

Python 3のデータ型を変換する方法

Published on December 1, 2020
日本語
Python 3のデータ型を変換する方法

はじめに

Pythonでは、データ型を使用して特定の種類のデータを分類し、その型に指定することができる値と、その型に対して実行できる操作を決定します。プログラミングするときは、さまざまな方法で値を操作するために、値を型間で変換する必要がある場合があります。たとえば、数値を文字列に連結したり、整数値として初期化された数値の小数点以下の桁数を表す必要がある場合があります。

このチュートリアルでは、数値、文字列、タプル、リストなどのデータ型の変換方法について説明し、さまざまなユースケースを理解するための例も紹介します。

数値型の変換

Pythonには、整数型および浮動小数点数型2つの数値データ型があります。他のユーザーのコードで操作しているときに、整数を浮動小数点数に変換する必要がある場合やその逆の場合、または実際浮動小数点数が必要である場合に、整数を使用していることに気づく場合があります。Pythonには、整数を浮動小数点数に、浮動小数点数を整数に簡単に変換できる組み込み関数があります。

整数を浮動小数点数に変換

Pythonのfloat()関数は、整数を浮動小数点数に変換します。この関数を使用するには、括弧内に整数を入力します。

float(57)

この場合、5757.0に変換されます。

これは変数を使用することもできます。f57と宣言して、 新たに浮動小数点数を出力してみましょう。

f = 57
print(float(f))
Output
57.0

float()関数を使用することで、整数を浮動小数点数に変換することができます。

浮動小数点数を整数に変換

Pythonには、浮動小数点数を整数に変換するためのint()組み込み関数もあります。

int()関数はfloat()関数と同様に機能します。括弧内に浮動小数点数を入力して、整数に変換することができます。

int(390.8)

この場合、390.8390に変換されます。

これは変数を使用することもできます。b125.0c390.8と宣言して、新たに浮動小数点数を出力してみましょう。

b = 125.0
c = 390.8

print(int(b))
print(int(c))
Output
125 390

int()関数を使用して浮動小数点数を整数に変換する場合、Pythonは浮動小数点数の小数点以下を切り捨てて、整数にします。390.8を391に切り上げたい場合でも、Pythonのint() 関数では、これを実行しません。

除算での数値の変換

Python 3で除算を行う場合、Python 2とは異なり、商は整数から浮動小数点に変換されます。つまり、Python 3では、5を2で割ると、浮動小数点数の答え(2.5)が返されます。

a = 5 / 2
print(a)
Output
2.5

Python 2では、2つの整数を処理していたため5/ 2 = 2のように、答えとして代わりに整数が返されます。 Python 2とPython 3の違いについての詳細は、「Python 2 と Python 3の比較: 実用的な考慮事項」を参照してください。

文字列を使用した変換

**文字列**は、1つ以上の文字(文字、数字、記号)のシーケンスです。文字列は、コンピュータープログラムの一般的なデータ形式で、特にユーザーが生成したデータを処理する場合は、文字列を数値、または数値を文字列に変換する必要がある場合がよくあります。

数値を文字列に変換

str()関数を使用して、数値を文字列に変換できます。数字または変数を関数の括弧内に渡し、その数値が文字列に変換されます。

まず、整数の変換を見てみましょう。整数12を文字列に変換するには、str()関数に12を渡します。

str(12)

端末ウィンドウで、pythonコマンドを使用してstr(12)をPythonインタラクティブシェルで実行すると、次の出力が表示されます。

Output
'12'

数値12を囲む引用符は、数値が整数ではなく、文字列になったことを示します。

変数を使用すると、整数を文字列に変換することがどれほど実用的であるかがわかります。例えば、ユーザーの毎日のプログラミングの進捗状況を追跡し、一度に何行のコードを記述するかを入力したいとします。このフィードバックをユーザーに表示し、文字列と整数値を同時に出力します。

user = "Sammy"
lines = 50

print("Congratulations, " + user + "! You just wrote " + lines + " lines of code.")

このコードを実行すると、次のエラーが発生します。

Output
TypeError: Can't convert 'int' object to str implicitly

Pythonでは文字列と整数を連結させることができないため、変数 linesを文字列値に変換する必要があります。

user = "Sammy"
lines = 50

print("Congratulations, " + user + "! You just wrote " + str(lines) + " lines of code.")

これで、コードを実行すると、ユーザーの進捗状況を称える次の出力が表示されます。

Output
Congratulations, Sammy! You just wrote 50 lines of code.

整数から文字列の変換ではなく、浮動小数点数を文字列に変換する場合は、同じ手順とフォーマットに従います。浮動小数点数をstr()関数に渡すと、浮動小数点数の文字列値が返されます。浮動小数点数値自体または変数を使用することができます。

print(str(421.034))

f = 5524.53
print(str(f))
Output
421.034 5524.53

文字列と連結して、結果が正しいかをテストして確認することができます。

f = 5524.53
print("Sammy has " + str(f) + " points.")
Output
Sammy has 5524.53 points.

エラー表示がなく連結が実行されため 、浮動小数点数が正しく文字列に変換されたことを確認できます。

文字列を数値に変換

int()およびfloat()関数を使用して、文字列を数値に変換することができます。

文字列に小数点以下の桁数がない場合は、int() 関数を使用して文字列を整数に変換することをお勧めします。

ユーザーSammyが、毎日記述しているコード行を追跡する例を見てみましょう。これらの値を計算して、ユーザーにさらに興味深いフィードバックを提供したいと思いますが、これらの値は現在、文字列に格納されています。

lines_yesterday = "50"
lines_today = "108"

lines_more = lines_today - lines_yesterday

print(lines_more)
Output
TypeError: unsupported operand type(s) for -: 'str' and 'str'

2つの数値が文字列に格納されていたため、エラーが発生しました。2つの文字列値が原因で、減算- のためのオペランドは、有効なオペランドではありません。

文字列を整数に変換するint()関数を含めるようにコードを変更し、本来文字列であった値を使用して計算ができるようにしましょう。

lines_yesterday = "50"
lines_today = "108"

lines_more = int(lines_today) - int(lines_yesterday)

print(lines_more)
Output
58

変数lines_moreは自動的に整数になり、この例では数値58に相当します。

int() 関数の代わりにfloat()関数を使用して、上記の例の数値を浮動小数点数値に変換することもできます。58と出力されるのではなく、浮動小数点数の58.0と出力されます。

ユーザーSammyは、10進数値でポイントを獲得しています。

total_points = "5524.53"
new_points = "45.30"

new_total_points = total_points + new_points

print(new_total_points)
Output
5524.5345.30

2つの文字列のオペランドで + を使用することは有効な操作ですが、この場合、2つの数値を加算するのではなく、2つの文字列を連結しています。したがって、2つの値を並べて配置するだけなので、出力はおかしく表示されます。

float()関数を使用して、計算を実行する前にこれらの文字列を浮動小数点数に変換する必要があります。

total_points = "5524.53"
new_points = "45.30"

new_total_points = float(total_points) + float(new_points)

print(new_total_points)
Output
5569.83

ここでは、2つの文字列を浮動小数点数に変換したので、5524.5345.30を加算する期待通りの結果を受け取ることができます。

小数点以下の桁数の文字列値を整数に変換しようとすると、次のようなエラーが発生します。

f = "54.23"
print(int(f))
Output
ValueError: invalid literal for int() with base 10: '54.23'

小数点以下の桁数の文字列をint()関数に渡すと、整数に変換されないため、エラーが発生します。

文字列を数値に変換すると、処理中のデータ型を素早く変更できるため、本来文字列としてキャストされた数値に対して操作を実行できます。

タプルおよびリストへの変換

list()およびtuple()関数を使用して、渡された値をそれぞれリストデータ型とタプルデータ型に変換できます。Pythonの場合:

  • **リスト**は、角括弧 [ ]内に含まれる要素を変更できる、順序付けられたシーケンスです。
  • タプルは、丸括弧( )内に含まれる要素を変更できない、順序付けられたシーケンスです。

タプルへの変換

まず、リストをタプルに変換してみましょう。リストをタプルに変換するということは、不変のデータ型への変換のため、作成するプログラムに対して大幅な最適化を行うことができます。tuple()関数を使用すると、渡された値のタプルバージョンが返されます。

print(tuple(['pull request', 'open source', 'repository', 'branch']))
Output
('pull request', 'open source', 'repository', 'branch')

項目が角括弧ではなく丸括弧内に含まれているため、タプルが出力されていることがわかります。

リストを表す変数を用いてtuple()を使用してみましょう。

sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp']
print(tuple(sea_creatures))
Output
('shark', 'cuttlefish', 'squid', 'mantis shrimp')

ここでも、リストの値が丸括弧で示されたタプルの値に変更されていることがわかります。文字列を含め、反復可能な型をタプルに変換できます。

print(tuple('Sammy'))
Output
('S', 'a', 'm', 'm', 'y')

文字列を反復処理できるため、tuple()関数を使用してタプルに変換できます。ただし、整数や浮動小数点数などの反復不可能なデータ型では、型式エラーが発生します。

print(tuple(5000))
Output
TypeError: 'int' object is not iterable

tuple(str(5000))のように、整数を文字列に変換してからタプルに変換することは可能ですが、複雑な変換を行うよりも読み取り可能なコードを選択する方が最適です。

リストへの変換

値の変換、特にタプルからリストへの変換は、変更可能な値が必要な場合に役立ちます。

list() 関数を使用して、次のタプルをリストに変換します。リストを作成するための構文は丸括弧を使用するため、list() 関数と、この場合はprint() 関数にも必ず丸括弧を使用してください。

print(list(('blue coral', 'staghorn coral', 'pillar coral')))
Output
['blue coral', 'staghorn coral', 'pillar coral']

角括弧は、 list() 関数を使用して渡された元のタプル値からリストが返されたことを示します。

コードをより読みやすくするために、次のように変数を使用して1組の丸括弧を削除できます。

coral = ('blue coral', 'staghorn coral', 'pillar coral')
list(coral)

list(coral)を出力すると、上記と同じ出力が返されます。

タプルと同様に、文字列はリストに変換できます。

print(list('shark'))
Output
['s', 'h', 'a', 'r', 'k']

ここで、文字列'shark'はリストに変換され、元の値の可変バージョンが提供されます。

まとめ

このPythonチュートリアルでは、主に組み込み関数を使用して、重要なネイティブデータ型のいくつかを他のデータ型に変換する方法を説明しました。Pythonでデータ型を変換できることで、プログラムを記述する際の柔軟性がさらに高まります。

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel