Python 这条线是干什么的?(使用num和enumerate)

Python 这条线是干什么的?(使用num和enumerate),python,Python,我是一个python初学者,我已经得到了这段代码来写出每行代码的作用。代码如下: z = [int(input("Enter your nth term sequence ")) for _ in range(12)] total = sum([num * 8 if i % 2 == 0 else num * 4 for i, num in enumerate(z)]) 所以,我假设z是一个列表,其中用户输入第n项序列的数字,他们可以输入12位数字。然后,如果某个数除以2得到余数为0,则代码将

我是一个python初学者,我已经得到了这段代码来写出每行代码的作用。代码如下:

z = [int(input("Enter your nth term sequence ")) for _ in range(12)]
total = sum([num * 8 if i % 2 == 0 else num * 4 for i, num in enumerate(z)])
所以,我假设z是一个列表,其中用户输入第n项序列的数字,他们可以输入12位数字。然后,如果某个数除以2得到余数为0,则代码将找到一个数乘以8的和。我只是不明白
([num*8,如果I%2==0,否则num*4,对于I,枚举中的num(z)])
的意思。我已经试过了,也试过了,但这太让人困惑了。如果可能,请提供帮助代码:

foo = [num * 8 if i % 2 == 0 else num * 4 for i, num in enumerate(z)]
在功能上与此等效:

foo = []
for i, num in enumerate(z): # num is element in z, i is index of num
    if i % 2 == 0:
        foo.append(num*8)
    else:
        foo.append(num*4)
然后用户对结果调用
sum

这回答了你的问题吗


编辑:解释枚举

例如,您应该习惯于阅读有关函数的文档。读完之后,如果你仍然不明白,那么你应该搜索stackoverflow。例如:

电话:

for num in z:
    i = z.index(num)
    # Do stuff
在功能上与以下内容相同:

for i, num in enumerate(z):
    # Do stuff
守则:

foo = [num * 8 if i % 2 == 0 else num * 4 for i, num in enumerate(z)]
在功能上与此等效:

foo = []
for i, num in enumerate(z): # num is element in z, i is index of num
    if i % 2 == 0:
        foo.append(num*8)
    else:
        foo.append(num*4)
然后用户对结果调用
sum

这回答了你的问题吗


编辑:解释枚举

例如,您应该习惯于阅读有关函数的文档。读完之后,如果你仍然不明白,那么你应该搜索stackoverflow。例如:

电话:

for num in z:
    i = z.index(num)
    # Do stuff
在功能上与以下内容相同:

for i, num in enumerate(z):
    # Do stuff

好吧,让我们把它分解一下。您正在将某些内容存储到变量“total”中

然后你要把括号里所有的东西加起来。运行一个if语句,表示if i模数2(即如果它可以被2整除并且没有余数)将num(一个变量)乘以8追加到列表z


否则,将num乘以4追加到列表z。这是一种简洁的方式,他们写的是陈述,而不是多行。您正在将某些内容存储到变量“total”中

然后你要把括号里所有的东西加起来。运行一个if语句,表示if i模数2(即如果它可以被2整除并且没有余数)将num(一个变量)乘以8追加到列表z


否则,将num乘以4追加到列表z。这是一种简洁的方式,让他们写出陈述,而不是多行

让我们一步一步地把它分解

z = [int(input("Enter your nth term sequence ")) for _ in range(12)]
首先,您认为
z
是一个列表的假设是正确的。它是从列表中生成的。它使用
input(“输入第n个术语序列”)
从用户处获取输入,使用
for在范围(12)
中总共12次。因此,
z
将是12个用户输入整数的列表(不是数字,因为它可以是任何整数,而不仅仅是0-9)

接下来我们有:

total = sum([num * 8 if i % 2 == 0 else num * 4 for i, num in enumerate(z)])
很明显,我们正在从一个列表的总和生成一个总和,该列表的
total=sum([…])
。接下来,我们需要计算出列表理解生成的列表的内容

为了使列表理解更容易理解,我们可以添加一些括号,将理解分解为更容易管理的部分,然后分别处理

(num*8)if(i%2==0)else(num*4)for(i,num)in(枚举(z))

前三组相当不言自明:

num*8
8倍于一个数字
i%2==0
检查
i
是否为偶数
num*4
一个数字的四倍

因此,如果
i
是偶数,则列表理解的前半部分返回的值是该数字的八倍,如果不是偶数,则返回该数字的四倍

这样,我们就可以理解enumerate(z)中i,num的列表的后半部分了

让我们先讨论枚举。Enumerate获取一个序列,并对该序列中的每个元素进行编号。例如,
enumerate(['a','b','c'])
将返回一个两元素元组的列表
[(0,'a'),(1,'b'),(2,'c')]

对于i,num in中的
enumerate(z)
中提取元组,并将每个元组解压为
i
num
。因此,
i
是由
enumerate
生成的索引,
num
是原始用户输入

TL;博士 第1行从用户输入中获取12个整数,并将它们存储在
z

第2行获取这些整数,对它们进行索引(从0开始),如果索引为偶数,则将该数字乘以8,如果索引为奇数,则将该数字乘以4


最后,第2行将所有相乘的用户输入相加,并将其存储在
总计中

让我们一步一步地分解

z = [int(input("Enter your nth term sequence ")) for _ in range(12)]
首先,您认为
z
是一个列表的假设是正确的。它是从列表中生成的。它使用
input(“输入第n个术语序列”)
从用户处获取输入,使用
for在范围(12)
中总共12次。因此,
z
将是12个用户输入整数的列表(不是数字,因为它可以是任何整数,而不仅仅是0-9)

接下来我们有:

total = sum([num * 8 if i % 2 == 0 else num * 4 for i, num in enumerate(z)])
很明显,我们正在从一个列表的总和生成一个总和,该列表的
total=sum([…])
。接下来,我们需要计算出列表理解生成的列表的内容

为了使列表理解更容易理解,我们可以添加一些括号,将理解分解为更容易管理的部分,然后分别处理

(num*8)if(i%2==0)else(num*4)for(i,num)in(枚举(z))

前三组相当不言自明:

num*8
8倍于一个数字
i%2==0
检查
i
是否为偶数
num*4
一个数字的四倍

因此,如果
i
是偶数,则列表理解的前半部分返回的值是该数字的八倍,如果不是偶数,则返回该数字的四倍

那就剩下最后一个了