ここにネストされたバージョンがあります
li = ['0', ['1', '2'], ['3', ['4', '5'], '6', ['7'], '8'], '9']
def to_int(lst, path=[]):
for i, j in enumerate(lst):
if isinstance(j, list):
yield list(to_int(j, path+[i]))
else:
yield int(j), path+[i]
print(list(to_int(li)))
フラット化されたバージョン (Python3.3+)
li = ['0', ['1', '2'], ['3', ['4', '5'], '6', ['7'], '8'], '9']
def to_int(lst, path=[]):
for i, j in enumerate(lst):
if isinstance(j, list):
yield from to_int(j, path+[i])
else:
yield int(j), path+[i]
for item in to_int(li):
print (item)
使えない場合yield from
(< Python3.3)は、このように面倒な書き方をしなければなりません
li = ['0', ['1', '2'], ['3', ['4', '5'], '6', ['7'], '8'], '9']
def to_int(lst, path=[]):
for i, j in enumerate(lst):
if isinstance(j, list):
for item in to_int(j, path+[i]): yield item
else:
yield int(j), path+[i]
for item in to_int(li):
print (item)
通常、空のリストをデフォルトのパラメーターとして使用することはお勧めできませんが、ここでは変更しないように注意しているので問題ありません。