[英]Python List Comprehension with two parameters
我不知道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)]
这是说:
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*2, 100, i); (4, 100, 2)
(i*2, 100, i); (4, 100, 2)
<---这只是第一次迭代。 i
表示起始范围编号以及每个循环的步骤。 希望能有所帮助。
首先 ,避免代码编排,让我们重新编写代码,如下所示:
noprimes = []
for i in range(2, 8):
for j in range(i*2, 100, i):
noprimes += [j]
请注意,变量i
包含在2
in和8
ex之间。 这意味着,如果要使用8
作为包含的上限,则必须将range
函数重写为range(2, 8+1)
。 在下文中,我假设你想7
作为 cluded上限。 此外,请注意,此处不可见的默认参数是step参数1
,这意味着range(2, 8)
隐式为range(2, 8, 1)
2,8,1 range(2, 8, 1)
。
其次 ,让我们通过将这两个级别的循环转换为多个可分解的一级循环来了解发生了什么。
从i=2
开始,这样
i = 2
for j in range(i*2, 100, i):
noprimes += [j]
实际上相当于
for j in range(2*2, 100, 2):
noprimes += [j]
上面我们使j
可以包含间4
在 cluded和100
的前 cluded( 98
中 cluded)通过步骤2
。
相同地,对于例如i=3
,我们有
for j in range(3*2, 100, 3):
noprimes += [j]
这使得j
包含在3
步骤中的6
in和100
ex中。 而且考虑到100
不是整数倍3
, 中 cluded上限将是99
。 (实际上,因为100%3
等于1
)。
等多达7
在 cluded。 在这种情况下会导致
for j in range(14, 100, 7):
noprimes += [j]
这使得j
由7
的步长包含在14
in cluded和100
ex exuded之间。 并且假定与3
, 100
不是7
的整数倍,则包含的上限将是100 - 100%7
, 即 98
。
blabla = []
的用法,
blabla.append('string stuf')
代替
blabla += ['string stuf']
甚至
blabla.extend(['string stuf'])
请注意,在这种情况下,这三种方法虽然不相同 , 但可以执行相同的操作。 有关选择哪一个的详细信息,请参见
要么
您发布的代码使用List Comprehensions 。 这是一种更整洁的写法:
noprimes = []
for i in range(2, 8):
for j in range(i*2, 100, i):
noprimes.append(j)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.