什么是“ c”和“值”?有人可以解释这些工作原理吗?

时间:2018-09-29 20:43:43

标签: python python-3.x

第一个示例:

my_list = ['apple', 'banana', 'grapes', 'pear']

for c, value in enumerate(my_list, 1):
    print(c, value)

另一个示例:

[print(int(x)==sum(int(d)**p for p,d in enumerate(x,1)))for x in[input()]]

xdp如何工作?

3 个答案:

答案 0 :(得分:1)

因此,这里有两个小问题:

a)

my_list = ['apple', 'banana', 'grapes', 'pear']

for c, value in enumerate(my_list, 1):
    print(c, value)

步骤如下:

  1. enumerate(my_list, 1)将获得一个带有索引的列表,这里的输出是一个枚举对象,如果使用list(enumerate(my_list, 1)来查看,则为[(1, 'apple'), (2, 'banana'), (3, 'grapes'), (4, 'pear')]
  2. 因此,对于每个for,第一个迭代得到c=1, value='apple',第二个迭代得到c=2, value='banana' ...
  3. 然后最终输出是:
1 apple
2 banana 
3 grapes 
4 pear

b)

[print(int(x)==sum(int(d)**p for p,d in enumerate(x,1)))for x in[input()]]

步骤如下:

  1. 首先,它是list comprehension,我想你已经知道了。
  2. input首先需要用户输入,例如输入100,然后input会将其视为str,因此[input()]返回['100']
  3. 然后与for x in [input()]的{​​{1}}是x
  4. 接下来根据'100',它将处理list comprehension
  5. int(x)==sum(int(d)**p for p,d in enumerate(x,1))首先将迭代'100',如果使用列表来查看它,则会得到类似(int(d)**p for p,d in enumerate(x,1))的信息,与示例1相似。然后为每个迭代计算[(1, '1'), (2, '0'), (3, '0')],最后使用{ {1}}得到结果,类似于int(d)**p,结果为sum
  6. 因此int('1')**1 + int('0')**2 + int('0')**3当然会输出1
  7. 并且print(int('100')==1函数调用的返回值始终为False,因此print将使新列表为None
  8. 所以最终的结果是(注意:100是您输入的回声):
>>> [print(int(x)==sum(int(d)**p for p,d in enumerate(x,1)))for x in[input()]]
100
False
[None]

答案 1 :(得分:0)

当您对内置函数(例如enumerate)有疑问时,最好在Python文档中查找内容。指向该链接的是here

要进行解释,枚举将帮助您遍历列表中的所有值,并且如果您传入可选参数号(如示例中的1),则它指定要从其进行迭代的起始索引。

枚举返回的内容是索引,然后是存储在列表中该索引处的项目。因此,在您的示例中,c将成为for循环中的每个索引(1、2、3等)。在您的示例中,value是存储在列表中该索引处的实际值。

还请记住,列表从索引0开始而不是第一个值1。

答案 2 :(得分:0)

使用 enumerate 时,常见的命名系统是 idx,item 。它可以清楚地表明每个元素代表什么,并且最适合您遵循此命名方案

; AddTwoSum_64.asm - Chapter 3 example.

ExitProcess proto

.data
sum qword 0

.code
main proc
    mov rax,5
    add rax,6
    mov   sum,rax
    mov   ecx,0
    call  ExitProcess

main endp
end
l = ['a', 'b', 'c']
print([(idx, item) for idx, item in enumerate(l)])

如您所见, idx 代表该项目的索引,而 item 是该项目。