Set型
前回、Pythonでタプル(tuple)の作成、要素の取得・追加の方法を紹介しました。
今回はSet型を使って多次元のリストやタプルの重複を削除する方法を紹介します。
それでは始めていきましょう。
1次元のリストやタプルをSet型に変更して重複を削除
まずは1次元のリストやタプルをSet型へ変更し、重複を削除する方法です。
リストやタプルをSet型に変更するには「set(リストやタプル)」を用います。
ls = [1, 2, 3, 1, 3]
st = set(ls)
print(st)
実行結果
{1, 2, 3}
tup = (1, 2, 3, 1, 3)
st = set(tup)
print(st)
実行結果
{1, 2, 3}
1次元の場合はリストでもタプルでもSet型に変更できました。
多次元のリストやタプルをSet型に変更して重複を削除する方法
次に多次元のリストやタプルをSet型に変更して重複を削除する方法です。
とりあえず多次元のリストを作成し、Set型に変更してみます。
ls = [[1,1], [2,2], [3,3], [1,1], [3,3]]
st = set(ls)
print(st)
実行結果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[2], line 3
1 ls = [[1,1], [2,2], [3,3], [1,1], [3,3]]
----> 3 st = set(ls)
5 print(st)
TypeError: unhashable type: 'list'
多次元のリストの場合はエラーとなってしまいました。
次に多次元のタプルをSet型に変更してみます。
tup = ((1,1), (2,2), (3,3), (1,1), (3,3))
st = set(tup)
print(st)
実行結果
{(1, 1), (3, 3), (2, 2)}
多次元のタプルの場合はSet型に変更できました。
多次元のリストのどこでエラーとなっているのかを調べてみましょう。
まずは1次元目がリスト、2次元目(以降)がタプルになっている場合です。
ls = [(1,1), (2,2), (3,3), (1,1), (3,3)]
st = set(ls)
print(st)
実行結果
{(1, 1), (3, 3), (2, 2)}
この場合はエラーとならずにSet型に変更することができました。
次に1次元目がタプル、2次元目(以降)がリストになっている場合を試してみましょう。
tup = ([1,1], [2,2], [3,3], [1,1], [3,3])
st = set(tup)
print(st)
実行結果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[5], line 3
1 tup = ([1,1], [2,2], [3,3], [1,1], [3,3])
----> 3 st = set(tup)
5 print(st)
TypeError: unhashable type: 'list'
こちらはエラーとなってしまいました。
つまり2次元目以降にリストがあるとエラーとなるようです。
多次元のリストをSet型に変更して重複を削除する方法
多次元のリストをSet型に変更して重複を削除するには一度タプルに変換してからSet型に変更します。
今回はリスト内包表記を使って、要素をタプルに変換してみました。
ls = [[1,1], [2,2], [3,3], [1,1], [3,3]]
tup = [tuple(data) for data in ls]
st = set(tup)
print(st)
実行結果
{(1, 1), (3, 3), (2, 2)}
これで重複は削除できましたが、値はSet型で得られています。
これをリストに戻すには再度リスト内包表記を使って、要素をリストに変換します。
ls = [[1,1], [2,2], [3,3], [1,1], [3,3]]
tup = [tuple(data) for data in ls]
st = set(tup)
ls = [list(data) for data in st]
print(ls)
実行結果
[[1, 1], [3, 3], [2, 2]]
ちなみに得られたSet型の結果を単純にリストに変換すると1次元目だけリストになるので注意です。
ls = [[1,1], [2,2], [3,3], [1,1], [3,3]]
tup = [tuple(data) for data in ls]
st = set(tup)
ls = list(st)
print(ls)
実行結果
[(1, 1), (3, 3), (2, 2)]
これで多次元のリスト、タプルをSet型に変換して重複を削除することができました。
次回はTurtleで木を描いた際に使った再帰処理をもう少し勉強してみます。
ではでは今回はこんな感じで。
コメント