Python数组混乱

时间:2018-09-21 13:18:58

标签: python arrays python-3.x list-comprehension

我是python新手。我来自C / C ++背景,这对我来说很难理解一些python的概念。我偶然发现了这一段让我感到困惑的代码:

file_names = [os.path.join(label_directory, f)
                   for f in os.listdir(label_directory) 
                   if f.endswith(".ppm")]

因此,这是一个将label_directory与变量f(两个字符串)连接在一起的数组,该变量最初未初始化。如果条件f为真,则for循环然后填充变量f.endswith(".ppm")

现在,从我的C / C ++角度来看:

一个for循环,具有一个if语句,该语句返回TrueFalse。排除所有不以".ppm"扩展名结尾的文件的逻辑在哪里?

2 个答案:

答案 0 :(得分:1)

此语法称为列表理解。它通过对满足for标准的嵌入式if循环的每个元素的左方括号后的表达式求值来构造列表。

答案 1 :(得分:1)

这称为列表理解。 Python将列表推导定义为

  

列表推导由包含表达式的方括号组成,后跟一个for子句,然后是零个或多个for或if子句。结果将是一个新列表,该列表是通过在其后的for和if子句的上下文中评估表达式而得出的。

从语法上讲,您提供的代码与

相同
file_names = []
for f in os.listdir(label_directory):
    if f.endswith(".ppm"):
        file_names.append(os.path.join(label_directory, f))

如果您想了解有关列表推导的更多信息,可以在这里找到更多信息:https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions