这是一个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
感谢。
答案 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