The kernel appears to have died. It will restart automatically.と吐いて計算をやめてしまう対処法について。
以下リスト内のリストをすべて外す関数を用いて。
python
1def flatten(data): 2 for item in data: 3 if hasattr(item, '__iter__'): 4 for element in flatten(item): 5 yield element 6 else: 7 yield item 8rensyu = [1,[1,2],3,[1,[1,2]]] 9print(list(flatten(rensyu)))
上記のコードを実行すると以下のような結果が返ってくる。
[1, 1, 2, 3, 1, 1, 2]
このようになる理由は分かっているつもりだったのですが、
python
1def flatten(data): 2 for item in data: 3 if hasattr(item, '__iter__'): 4 for element in flatten(item): 5 yield element 6 else: 7 yield item 8rensyu = [1,[1,2],3,[1,[1,2]],'Hello'] 9print(list(flatten(rensyu)))
rensyuというリストに'Hello'なる文字列を追加したとき
実行結果が以下のように帰ってきてしまいます。
RecursionError: maximum recursion depth exceeded
そこで以下のようなコードを追加することにより解決するというサイトを発見したので、
https://qiita.com/narupo/items/e25ac05a9065c0bd9c03
python
1import sys 2sys.setrecursionlimit(10000)
上記のコードを含め、再び以下のコードを実行したところ
python
1def flatten(data): 2 for item in data: 3 if hasattr(item, '__iter__'): 4 for element in flatten(item): 5 yield element 6 else: 7 yield item 8rensyu = [1,[1,2],3,[1,[1,2]],'Hello'] 9print(list(flatten(rensyu)))
以下の結果が返って来てしまいました。
The kernel appears to have died. It will restart automatically.
私としては、以下のような結果が得られればうれしいです。
[1, 1, 2, 3, 1, 1, 2,'Hello']
なぜエラーが発生してしまうか、
また、得られたらうれしい結果はどのようにすれば出すことができるか
教えて頂けると恐縮です。
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/20 07:02