我是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语句,该语句返回True
或False
。排除所有不以".ppm"
扩展名结尾的文件的逻辑在哪里?
答案 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