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”的主要内容,如果未能解决你的问题,请参考以下文章

370Python列表生成式(for 写入一行)

《python从入门到实践》--第四章基本操作列表 重点及课后练习

Python for列表循环

python通过列表创建一个包含一行的数据框

Python 4.1遍历整个列表(动手试一试)

《Python从入门到实践》第四章动手试一试