[解決済み] 関数呼び出しのアスタリスク[重複]について
2022-08-23 06:38:13
質問
itertools.chainを使って、このようにリストのリストを"flatten"しています。
uniqueCrossTabs = list(itertools.chain(*uniqueCrossTabs))
と言うのとどう違うのでしょう。
uniqueCrossTabs = list(itertools.chain(uniqueCrossTabs))
どのように解決するのですか?
*
は "splat"演算子です。これは入力としてリストを受け取り、それを関数呼び出しの実際の位置引数に展開します。
ですから、もし
uniqueCrossTabs
は
[ [ 1, 2 ], [ 3, 4 ] ]
であった。
itertools.chain(*uniqueCrossTabs)
は、次のように言うのと同じです。
itertools.chain([ 1, 2 ], [ 3, 4 ])
これは明らかに、単に
uniqueCrossTabs
. あなたの場合、平坦化したいリストのリストがあります。
itertools.chain()
が行うのは、渡したすべての位置引数の連結に対するイテレータを返すことです。
言い換えれば、各リストを
uniqueCrossTabs
の各リストを引数として
chain()
への引数として指定すると、それらは連鎖していきますが、リストが別々の変数にあるわけではないので
*
演算子を使ってリストのリストを複数のリスト引数に展開します。
Jochen Ritzel氏がコメントで指摘しているように
chain.from_iterable()
の方がこの操作に適しています。これは、そもそも単一の反復可能な反復記号を想定しているからです。そうすると、あなたのコードはシンプルになります。
uniqueCrossTabs = list(itertools.chain.from_iterable(uniqueCrossTabs))
関連
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 関数呼び出しにおけるstarとdoublestarの演算子の意味は?
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法