【问题标题】:What are 'c' and 'value' ? Can someone explain how these works? [duplicate]'c' 和 'value' 是什么?有人可以解释这些是如何工作的吗? [复制]
【发布时间】:2018-09-29 20:43:43
【问题描述】:

第一个例子:

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 是如何工作的?

【问题讨论】:

  • 请将您的帖子限制为一个问题

标签: python python-3.x


【解决方案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个苹果 2根香蕉 3颗葡萄 4 梨

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()]x就是'100'
  4. 接下来根据list comprehension处理int(x)==sum(int(d)**p for p,d in enumerate(x,1))
  5. (int(d)**p for p,d in enumerate(x,1)) 将首先迭代 '100',如果使用 list 来查看,则得到类似 [(1, '1'), (2, '0'), (3, '0')] 的内容,与示例 1 类似。然后为每次迭代计算 int(d)**p,最后使用 sum 得到结果,类似于int('1')**1 + int('0')**2 + int('0')**3,结果为1
  6. 所以print(int('100')==1肯定输出False
  7. print函数调用的返回值始终是None,所以list comprehension会使新列表为[None]
  8. 所以最终输出是(注意:100 是您输入的回声):
>>> [print(int(x)==sum(int(d)**p for p,d in enumerate(x,1)))for x in[input()]] 100 错误的 [没有]

【讨论】:

    【解决方案2】:

    当您对 enumerate 等内置函数有疑问时,最好在 Python 文档中查找内容。一个链接是here

    为了解释它, enumerate 将帮助您遍历列表中的所有值,如果您传入一个可选参数编​​号(如示例中的 1),它会指定要迭代的起始索引。

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

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

    【讨论】:

      【解决方案3】:

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

      l = ['a', 'b', 'c']
      print([(idx, item) for idx, item in enumerate(l)])
      
      [(0, 'a'), (1, 'b'), (2, 'c')]
      

      如您所见,idx代表item的索引,item就是item。

      【讨论】:

        猜你喜欢
        • 2011-09-12
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 2023-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多