【问题标题】:Python basic – one line include a list, ‘for’ and ‘if’Python 基础——一行包含一个列表,“for”和“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

谢谢。

【问题讨论】:

  • 谢谢,沃恩·卡托。

标签: python


【解决方案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,这太棒了!非常感谢您详细的指导和补偿。
猜你喜欢
  • 1970-01-01
  • 2015-12-11
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 2015-05-18
  • 2021-06-04
相关资源
最近更新 更多