tupleをlistに変換する方法 まとめ

Pythonでtuple(タプル)をlist(リスト)に変換する方法をまとめます。

基本

list()でくくってあげれば良い。

1
2
3
>>> obj = (1,2)
>>> list(obj)
[1, 2]

ネスト (入れ子)への対応

パターン1. tuple-list構造

これは要するに、タプルの要素がリストなだけなので基本と同じ。

1
2
3
>>> obj = ([1,2], [3,4])
>>> list(obj)
[[1, 2], [3, 4]]

パターン2. list-tuple構造

リスト内包表記で生成したのち、タプル化する

1
2
3
4
obj = [{1,2}, {3,4}]
obj = tuple([list(e) for e in obj])
obj
([1, 2], [3, 4])

ジェネレータ式で生成したのち、タプル化する

1
2
3
4
obj = [{1,2}, {3,4}]
obj = tuple(list(e) for e in obj)
obj
([1, 2], [3, 4])

パターン3. tuple-tuple構造

これまでの方法を組み合わせれば良い。

1
2
3
4
>>> obj = [[1,2], [3,4]]
>>> obj = tuple(tuple(e) for e in obj)
>>> obj
((1, 2), (3, 4))

パターン4. 階層が不明、またはバラバラ

再帰を使って実装でき流。

リストまたはタプルかどうかisinstanceを使ってチェックする。

1
2
3
4
5
6
7
8
def tolist(obj):
new = []
for e in obj:
if isinstance(e, list) or isinstance(e, tuple):
new.append(tolist(e))
else:
new.append(e)
return new
1
2
3
>>> obj = ((1,2),(3,4,5),((6,),),[7],[[[8],],],[([9,],),])
>>> tolist(obj)
[[1, 2], [3, 4, 5], [[6]], [7], [[[8]]], [[[9]]]]

おまけ タプル化

1
2
3
4
5
6
7
8
def totuple(obj):
new = []
for e in obj:
if isinstance(e, list) or isinstance(e, tuple):
new.append(totuple(e))
else:
new.append(e)
return tuple(new)
1
2
3
>>> obj = [[1,2], [3,4],5,(6,7)]
>>> totuple(obj)
((1, 2), (3, 4), 5, (6, 7))