Tech-Joho.info

リストの要素の型

Python独学ならTech-Joho TOP > Python問題集 > リストの要素の型

問題

下のプログラムを実行すると、my_listの各要素をprint関数によって表示する。
ただし、自作のクラスvecについては、そのフィールドの数値が表示されない。


class vec:
def __init__(self, x, y):
self.x = x
self.y = y


my_list = [1, "2", 3.0, vec(4, 5)]
for item in my_list:
print(item)

このプログラムを修正し、my_listの要素のクラス名と内容の数値を整数で表示するようにせよ。
vecの各フィールドはコンマ区切りで表示せよ。

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

実行結果の例

このように表示して下さい。

<class 'int'>: 1
<class 'str'>;: 2
<class 'int'>: 3
<class '__main__.vec'>: 4,5

回答例

これが一つの回答です。

class vec:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return str(self.x) + "," + str(self.y)


my_list = [1, "2", 3.0, vec(4, 5)]
for item in my_list:
if isinstance(item, float):
item = int(item)
print(str(type(item)) + ": " + str(item))

解説

まず、クラス名の取得にはtype()関数を使います。
その戻り値をstr型に変換します。

次に、float型の値をそのまま文字列として表示すると、小数点以下がついてしまいますので、int型に変換します。
float型の判定には、isinstance関数を使います。

最後に、独自の型、vecを文字列に変換したときの内容を自由に設定するために、 __str__関数を定義しています。
2つのフィールド、xとyを”,”で結合しています。


# type関数は変数の型を取得する
print(type(999.9)
# ininstance関数で第一引数が第二引数のインスタンスかどうかを判定できるprint(isinstance(1.9, float))
print(isinstance(2, float))

参考

type()について
Python3 reference type

isinstance()について
Python3 reference isinstance

__str__メソッドについて
Python3 reference object.__str__