Python基础 - 一行包括一个列表,'for'和'if'

时间:2014-08-21 03:42:26

标签: python

这是一个Python新手问题(感谢帖子Import multiple excel files into python pandas and concatenate them into one dataframe

脚本是:

import os

files = os.listdir('C:\\TEST')
files_pdf = [f for f in files if f[-3:] == 'pdf']
print files_pdf

它提供文件夹中PDF文件的所有名称。

我试图从基本的方式理解它。我猜上面最长的一行用作:

files_ pdf = []
for f in files:
    if f[-3:] == ‘pdf’:
        files_ pdf.append(f)

问题在于,区别是什么?什么是'f for f in files'的原因或原则?

[for f in files if f[-3:] == 'pdf']   #doesn't work
[f for f in files if f[-3:] == 'pdf'] #works

感谢。

1 个答案:

答案 0 :(得分:2)

这称为列表理解

例如,

nums = [1, 2, 3, 4, 5]
squares = [x**2 for x in nums]
# squares: [1, 4, 9, 16, 25]

第一部分(在for之前)将被推入新列表。

所以

[f for f in files if f[-3:] == 'pdf']

仅表示“使用所有f in files,以便f[-3:] == 'pdf'形成列表”

关于列表推导有一些非常有用的技巧 例如,如果要创建包含一些空列表的列表供以后使用, 你可以写

multi_list = [[] for i in range(10)]   # correct
multi_list = [[]]*10                   # wrong!

这是因为[[]]*10将使用一个列表的相同引用,
但是[[] for i in range(10)]会创建10个独立列表。

有关详情,请查看List Comprehensions