Pythonのデフォルト関数に、暗号化などで使用するハッシュ値を返すhash関数があります。
ここではhash関数の使い方についてまとめています。
hash関数の基本構文
hash(tuple)
引数にはタプル(tuple)型の数値や変数を入れる必要があります。
・整数を渡すと、元の数値が返ります。
・list(配列)を渡すとエラーになります。
▼実例
hash((2,4,5))
#出力
8794205387495702562
list型を渡した場合はエラーになる
hash([2,4,5])
#出力
TypeError: unhashable type: 'list'
数値を渡すと、数値がそのまま返る
hash(2)
#出力
2
ハッシュ関数の応用
ハッシュ関数を使うと、2つの数値を入力してハッシュ値を返すプログラムを作成することもできます。
if __name__ == '__main__':
n = int(input())
integer_list = map(int, input().split())
t = tuple(integer_list)
print(hash(t))
・input().split()
input()を実行してからsplit()を実行する。
▼input()が2回実行される
n = int(input())
integer_list = map(int, input().split())
タプル(tuple)とは何か?
hashの引数にはタプル型のデータを指定する必要がありますが、そもそもタプルとは何でしょうか?まとめると次のような特性を持ったデータです。
イテラブルとは、要素を一つ一つ取り出すことができるという意味です。
見た目や性質はlistと類似しています。ただし、追加・削除など要素をいじれない点などが大きく異なります。
タプルの作り方
タプルを作る方法は1つではありません。主に次の3つの方法が使えます。
複数の値を直接指定する
x=5,4.1
print(x)
print(type(x))
#出力
(5, 4.1)
<class 'tuple'>
( )で囲む
x=(5,4)
print(x)
print(type(x))
#出力
(5, 4)
<class 'tuple'>
数値以外の文字列もタプル型にすることができます。
x="a","b"
print(x)
print(type(x))
#出力
('a', 'b')
<class 'tuple'>
x="a"
print(x)
print(type(x))
#出力
('a',)
<class 'tuple'>
tupleメソッドで変換する:tuple()
x=[1,2,3,4,5]
x=tuple(x)
print(x)
print(type(x))
#出力
(1, 2, 3, 4, 5)
<class 'tuple'>
※注意点
intやfloatなどイテラブルでない値はtupleにできないので注意が必要です。
x=(3)
print(x)
print(type(x))
#出力
TypeError: 'int' object is not iterable
x=3
x=tuple(x)
print(x)
print(type(x))
#出力
TypeError: 'int' object is not iterable