这个“x for x in.”怎么样?构建工作



谁能详细解释一下下面的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文档对此做了很好的解释。

最新更新