谁能详细解释一下下面的for循环类型?
primes = [x for x in range(2, 50) if x not in noprimes]
或
le_list = [i for i in getfiles(path) if i != 'fred']
我没有得到的位是i表示i,或者x表示x,我不明白它实际上在说什么。
variable for variable in a list if variable whatever.
我不明白为什么你需要变量两次开始。for循环遍历list中的每一项,它的处理方式有什么不同?
在写x for x
时明显多余地额外提到变量x
的原因是第一个x
不需要是x
。它恰好在你们给出的例子中。这里有几个例子,应该澄清你的问题中第一个和第二个x
之间的区别:
ones = [1 for x in range(10)]
这只是给出了一个包含10个元素的列表,与[1] * 10
相同。
squares = [x*x for x in range(10)]
对于指定范围内的每个x
,给出x
的平方。
在您的示例中,第二个x
是for循环使用的变量,而第一个x
只是一个表达式,在您的示例中恰好是x
。表达式可以是您喜欢的任何形式,不需要使用x
。
results = [expression for x in range(10)]
expression
可以包含任何您喜欢的内容-字符串,计算,函数-任何您选择的内容。如果表达式恰好是x
,那么如果您不习惯它,它看起来很不寻常,但它与以下相同:
results = []
for x in range(10):
results.append(expression)
理解它的好方法是用不同的方式阅读。所以如果我们用这段代码:
primes = [x for x in range(2, 50) if x not in noprimes]
我们可以这样读:
质数=所有"x在(2,50)范围内"但仅"当x不在非质数范围内"
它是元素转换的占位符。
假设你想要一个质数列表乘以2。然后你可以用x*2
替换第一个x
。
primes = [x*2 for x in range(2, 50) if x not in noprimes]
您写下面的代码说明您不想要转换,而只是原始x
。
primes = [x for x in range(2, 50) if x not in noprimes]
另一个透视图:考虑语句primes.append(x)
中的x
。该与您问题中循环中的第一个x
相同。实际上,这个与上面的循环完全相同。
primes = []
for x in range(2,50):
if x not in noprimes:
primes.append(x)
下面是另一个示例,x*2
。
primes = []
for x in range(2,50):
if x not in noprimes:
primes.append(x*2)
这种语法称为"推导式"(例如列表推导式、字典推导式等)。这是一种以编程方式指定列表/字典/其他数据结构内容的简洁方式。Python文档对此做了很好的解释。