我不知道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)]
答案 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
)。
依旧1>} 。在这种情况下会导致
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
请注意,在这种情况下,这三种方法虽然不一样,但执行相同的操作。有关选择哪一个的详细信息,请参阅
或
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;
...
...
...
}