1. ホーム
  2. functional-programming

[解決済み] python list comprehensions; リストのリストを圧縮する?

2023-03-06 17:55:24

質問

の皆さん、こんにちは。私は問題に対する最もエレガントな解決策を見つけようとしていて、私がやろうとしていることのためにpythonが何か組み込みを持っているかどうか疑問に思っています。

私がやっていることはこれです。私はリストを持っています。 A というリストがあり、関数 f という関数があり、これはアイテムを受け取ってリストを返します。リスト内包を使って A をこのように変換します。

[f(a) for a in A]

しかし、これはリストのリストを返します。

[a1,a2,a3] => [[b11,b12],[b21,b22],[b31,b32]]

私が本当に欲しいのは、フラット化されたリストを取得することです。

[b11,b12,b21,b22,b31,b32]

さて、他の言語にもこのようなものがあり、伝統的には flatmap と呼ばれ、.Net では SelectMany . pythonには似たようなものがありますか?リスト上の関数をマッピングして結果を平坦化するきちんとした方法はありますか?

私が解決しようとしている実際の問題はこれです; ディレクトリのリストから始めて、すべてのサブディレクトリを見つけます。 そうです。

import os
dirs = ["c:\\usr", "c:\\temp"]
subs = [os.listdir(d) for d in dirs]
print subs

currentliy は私にリストのリストを与えますが、私は本当にリストが欲しいのです。

どのように解決するのですか?

1つのリスト内包でネストした繰り返しを行うことができます。

[filename for path in dirs for filename in os.listdir(path)]

と等価である(少なくとも機能的には)。

filenames = []
for path in dirs:
    for filename in os.listdir(path):
        filenames.append(filename)