3

同等だと思った 2 つのコードがあります。リストの理解に関して私が見逃している理論的根拠を誰かが説明できますか?

次のコードをファイルに書き込むと、最後のサブフォルダーの内容のみが生成されます。

for root, directories, files in os.walk(directory):
    filenames = [os.path.join(root, filename) for filename in files]

ただし、次のコードはまさに私が望んでいることを実行します (ルート ディレクトリとそのサブディレクトリのすべての内容を書き込みます)。

allfiles = [os.path.join(root,f) for root,dirs,files in os.walk(directory) for f in files]

だから、彼らは私と同じように見えますが、明らかにそうではありません. 誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

1

最初のループで:

for root, directories, files in os.walk(directory):
    filenames = [os.path.join(root, filename) for filename in files]

filenamesループの反復ごとに新しいリスト内包表記に再割り当てしています。これによりfilenames、 からの最後のディレクトリのリスト内包表記のみになりos.walk()ます。

次のように変更します。

filenames = []
for root, directories, files in os.walk(directory):
    filenames.extend(os.path.join(root, filename) for filename in files)
于 2013-11-04T17:16:21.723 に答える