这条线做什么? (使用num和enumerate)

时间:2017-04-07 14:50:37

标签: 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个数字。然后代码找到一个数字的总和乘以8,如果除以2得到余数为0.我只是得不到([num * 8 if i % 2 == 0 else num * 4 for i, num in enumerate(z)])的含义。我试过并尝试过搜索,但这太令人困惑了。请尽可能帮助

3 个答案:

答案 0 :(得分:2)

代码:

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 这是否回答了你的问题?

编辑:解释枚举

您应该习惯阅读有关函数的文档,例如enumerate。在您阅读完之后,如果您仍然不了解,那么您应该搜索stackoverflow。例如:A post asking what enumerate is with a good answer

通话:

for num in z:
    i = z.index(num)
    # Do stuff

在功能上与说法相同:

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

答案 1 :(得分:2)

让我们一步一步地解决这个问题。

z = [int(input("Enter your nth term sequence ")) for _ in range(12)]

首先,您假设z是一个列表是正确的。它是从列表理解生成的。它使用input("Enter your nth term sequence ")for _ in range(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 (enumerate(z))

前三组是相当不言自明的:

num * 8八倍的数字 i % 2 == 0检查i是否均匀 num * 4四倍数

因此,如果i为偶数,则列表推导的前半部分返回的值为该数字的8倍,如果不是,则返回该数字的4倍。

这样我们就可以获得列表理解的后半部分for i, num in enumerate(z)

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

for i, num inenumerate(z)获取元组,并将每个元组解压缩为inum。因此i是由enumerate生成的索引,num是原始用户输入。

TL; DR

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)])

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

第2行采用那些整数,对它们进行索引(从0开始),如果索引是偶数,则将该数乘以8,如果索引是奇数,则将该数乘以4。

最后,第2行将所有相乘的用户输入相加,并将它们存储在total

答案 2 :(得分:1)

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

然后你将括号内的所有内容总和。你运行一个if语句,说如果i模数2(即如果它可被2整除并且没有剩余余数)将num(变量)乘以8加到列表z。

否则,在列表z中附加数字4。它是一种紧凑的方式,他们写出了语句而不是多行