[解決済み] 不規則なリスト群を平坦にする
2022-03-20 20:20:41
質問
はい、このテーマは以前にも取り上げられたことがありますね( こちら , こちら , こちら , こちら ) が、私の知る限り、このようなリストでは、1つを除いて、すべての解決策が失敗します。
L = [[[1, 2, 3], [4, 5]], 6]
目的の出力は
[1, 2, 3, 4, 5, 6]
あるいは、イテレータの方がいいかもしれません。私が見た中で、任意のネストに対応する唯一の解決策は、次のようなものでした。 この質問では :
def flatten(x):
result = []
for el in x:
if hasattr(el, "__iter__") and not isinstance(el, basestring):
result.extend(flatten(el))
else:
result.append(el)
return result
flatten(L)
これが最適なモデルなのでしょうか?何か見落としがあったのでしょうか?何か問題はありますか?
解決方法は?
ジェネレータ関数を使用すると、サンプルが少し読みやすくなり、おそらくパフォーマンスも上がります。
Python 2
def flatten(l):
for el in l:
if isinstance(el, collections.Iterable) and not isinstance(el, basestring):
for sub in flatten(el):
yield sub
else:
yield el
を使いました。 イテラブルABC 2.6で追加された
Python 3
Python 3 では
basestring
はもうありませんが、タプルの
str
と
bytes
を使えば、そこで同じ効果を得ることができます。
は、その
yield from
演算子は、ジェネレータから一度にひとつずつ項目を返します。これは
サブジェネレータに委ねるための構文
は 3.3 で追加されました。
from collections.abc import Iterable
def flatten(l):
for el in l:
if isinstance(el, Iterable) and not isinstance(el, (str, bytes)):
yield from flatten(el)
else:
yield el
関連
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] リストの要素数を取得する方法
-
[解決済み] 配列の結合/平坦化
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Pythonショートビデオクローラーチュートリアル
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み] データ型が理解できない
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】Flaskのテンプレートが見つからない【重複あり