Python 基础——一行包含一个列表,“for”和“if”
Posted
技术标签:
【中文标题】Python 基础——一行包含一个列表,“for”和“if”【英文标题】:Python basic – one line include a list, ‘for’ and ‘if’ 【发布时间】:2014-10-14 14:07:01 【问题描述】:这是一个 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】:这称为列表理解
例如,
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
【讨论】:
LeoMao,这太棒了!非常感谢您详细的指导和补偿。以上是关于Python 基础——一行包含一个列表,“for”和“if”的主要内容,如果未能解决你的问题,请参考以下文章