Python3-x for x for循环-它们是如何工作的?

Python3-x for x for循环-它们是如何工作的?,python,python-3.x,Python,Python 3.x,有人能详细解释一下下面的for循环类型吗 primes = [x for x in range(2, 50) if x not in noprimes] 或 我没有得到的是i代表i,或者x代表x。我不明白它到底在说什么 variable for variable in a list if variable whatever. 我不明白为什么一开始就需要变量两次。for循环遍历列表中的每个项目,如何区别对待它?它是元素转换的占位符 假设您想要一个素数列表乘以2。然后可以将第一个x替换为x*2

有人能详细解释一下下面的for循环类型吗

primes = [x for x in range(2, 50) if x not in noprimes]

我没有得到的是i代表i,或者x代表x。我不明白它到底在说什么

variable for variable in a list if variable whatever.

我不明白为什么一开始就需要变量两次。for循环遍历列表中的每个项目,如何区别对待它?

它是元素转换的占位符

假设您想要一个素数列表乘以2。然后可以将第一个
x
替换为
x*2

primes = [x*2 for x in range(2, 50) if x not in noprimes]
primes = []
for x in range(2,50):
   if x not in noprimes:
       primes.append(x*2)
您编写以下代码是为了说明您不需要转换,只需要原始的
x

primes = [x for x in range(2, 50) if x not in noprimes]

<强>另一个透视图< /强>:在语句<代码> Primes中添加< <代码> x >代码>。这与问题循环中的第一个

x
相同。事实上,这是与上述循环完全相同的循环

primes = []
for x in range(2,50):
   if x not in noprimes:
       primes.append(x)
下面是另一个示例,带有
x*2

primes = [x*2 for x in range(2, 50) if x not in noprimes]
primes = []
for x in range(2,50):
   if x not in noprimes:
       primes.append(x*2)

理解它的好方法是读一点不同的东西。因此,如果我们将您的代码片段:

primes = [x for x in range(2, 50) if x not in noprimes]
我们可以阅读如下:

素数=所有的“x为”,其中“x在范围(2,50)”中,但仅“如果x不在noprimes中”


我希望这有助于您更好地理解功能。

在为x编写
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

primes = [x for x in range(2, 50) if x not in noprimes]

expression
可以包含您喜欢的任何内容—字符串、计算、函数—无论您选择什么。如果表达式正好是
x
,那么如果您不习惯它,它看起来会很不寻常,但它与以下内容相同:

results = []
for x in range(10):
    results.append(expression)

这种语法称为“理解”(例如列表理解、词典理解等)。这是一种以编程方式指定列表/字典/其他数据结构内容的简洁方法。医生解释得很好。

仍然没有跟上对不起,也不知道x^2做什么。@githubphagoyte,哎呀,我的意思是
**
。修正了@githubphagoyte,我只是将它改为简单的乘法,以避免运算符的复杂性,因为这不是示例的重点。谢谢你指出这一点。我已经写了太多的
latex
R
。我惊讶地看到这个(简单的)问题以前从未被问及堆栈溢出。。。