Python List Comprehension有两个参数

时间:2017-04-18 11:04:13

标签: python list

我不知道i和j如何在以下代码中进行交互: 如果我遇到结果2,3,4,5,6,7,8,但j在这种情况下如何运行。

noprimes = [j for i in range(2, 8) for j in range(i*2, 100, i)]

3 个答案:

答案 0 :(得分:2)

这是在说:

for i in range(2, 8):
    for j in range(i*2, 100, i):
        noprimes.append(j)

首先它将循环遍历2-8中的每个数字。对于这些数字中的每一个,j将等于(i*2, 100, i); (4, 100, 2)中的数字< ---这只是第一次迭代。 i表示起始范围编号以及每个循环的步骤。希望有所帮助。

答案 1 :(得分:0)

首先,避免代码转换,让我们重新编写代码如下:

noprimes = []
for i in range(2, 8):
    for j in range(i*2, 100, i):
        noprimes += [j]

请注意,变量i包含在{/ 1}} cluded和2 ex cluded之间。这意味着如果您希望使用8作为包含的上限,则必须将8函数重写为range。在下文中,我假设您确实希望{<1}}为 包含的上限。此外,请注意,此处不可见的默认参数是range(2, 8+1)的步骤参数,这意味着7隐式1

第二次,让我们通过将这个两级循环转换为多个分解的一级循环来看看发生了什么。

range(2, 8)开始

range(2, 8, 1)

实际上相当于

i=2

上面我们将i = 2 for j in range(i*2, 100, i): noprimes += [j] 包含在<{1}} cluded和for j in range(2*2, 100, 2): noprimes += [j] ex cluded(j <之间4步骤中的strong> in cluded。

相同,例如,100,我们有

98

使2包含在i=3 cluded和for j in range(3*2, 100, 3): noprimes += [j] ex 之间j 。鉴于6不是100的整数倍, 包含的上限将为3。 (确实,因为100等于3)。

依旧} 。在这种情况下会导致

99

使100%3包含在1 cluded和7 ex 之间for j in range(14, 100, 7): noprimes += [j] 。鉴于此情况,与j的情况一样,14不是100的整数倍,包含上限将为{{1} }, ie 7


另外,如果您怀疑3,请使用

100

而不是

7

甚至

100 - 100%7

请注意,在这种情况下,这三种方法虽然不一样,但执行相同的操作。有关选择哪一个的详细信息,请参阅

  

append vs. extend

  

What is the difference between “.append()” and “+=[]”?

     

答案 2 :(得分:0)

您发布的代码使用List Comprehensions。这是一种更简洁的写作方式:

void tetgenmesh::dummyinit(int tetwords, int shwords)
{
  unsigned long alignptr;

  // Set up 'dummytet', the 'tetrahedron' that occupies "outer space".
  dummytetbase = (tetrahedron *) new char[tetwords * sizeof(tetrahedron)
                                          + tetrahedrons->alignbytes];
  // Align 'dummytet' on a 'tetrahedrons->alignbytes'-byte boundary.
  alignptr = (unsigned long) dummytetbase;
  dummytet = (tetrahedron *)
    (alignptr + (unsigned long) tetrahedrons->alignbytes
     - (alignptr % (unsigned long) tetrahedrons->alignbytes));
  // Initialize the four adjoining tetrahedra to be "outer space". These
  //   will eventually be changed by various bonding operations, but their
  //   values don't really matter, as long as they can legally be
  //   dereferenced.
  dummytet[0] = (tetrahedron) dummytet;
  dummytet[1] = (tetrahedron) dummytet;
  dummytet[2] = (tetrahedron) dummytet;
  dummytet[3] = (tetrahedron) dummytet;
...
...
...
}