繁体   English   中英

具有两个参数的Python列表理解

[英]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 in8 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 in100 ex中。 而且考虑到100不是整数倍3 cluded上限将是99 (实际上,因为100%3等于1 )。

等多达7 cluded。 在这种情况下会导致

for j in range(14, 100, 7):
    noprimes += [j]

这使得j7的步长包含在14 in cluded和100 ex exuded之间。 并且假定与3100不是7的整数倍,则包含的上限将是100 - 100%7 98



另外 ,如果您想知道blabla = []的用法,

blabla.append('string stuf')

代替

blabla  += ['string stuf']

甚至

blabla.extend(['string stuf'])

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

追加与扩展

要么

“ .append()”和“ + = []”之间有什么区别?

您发布的代码使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM