【问题标题】:Loop through list with both content and index [duplicate]循环遍历包含内容和索引的列表[重复]
【发布时间】:2012-07-13 14:45:23
【问题描述】:

循环遍历python列表以获取内容它们的索引是很常见的。我通常做的事情如下:

S = [1,30,20,30,2] # My list
for s, i in zip(S, range(len(S))):
    # Do stuff with the content s and the index i

我觉得这个语法有点难看,尤其是zip 函数内部的部分。有没有更优雅/Pythonic 的方式来做到这一点?

【问题讨论】:

    标签: python list loops


    【解决方案1】:

    使用enumerate():

    >>> S = [1,30,20,30,2]
    >>> for index, elem in enumerate(S):
            print(index, elem)
    
    (0, 1)
    (1, 30)
    (2, 20)
    (3, 30)
    (4, 2)
    

    【讨论】:

    • 这就是答案。仅提供所选答案中的链接不是“StackOverflow-esc”
    • 我正在使用 ajax 将数据作为数组发送到 Django 视图,该数组形式为变量 legData 中的两个值,其值为[1406, 1409]。如果我使用print(legData) 打印到控制台,我会得到[1406,1409] 的输出。但是,如果我尝试解析列表的各个值,例如 for idx, xLeg in enumerate(legData): print(idx, xLeg),我会得到单个 整数 的输出,例如 [、1、4、0、6 等针对索引 0、1、2、3、4 等(是的,方括号和逗号也被输出,就好像它们是数据本身的一部分)。这里出了什么问题?
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      和其他人一样:

      for i, val in enumerate(data):
          print i, val
      

      for i, val in enumerate(data, 1):
          print i, val
      

      换句话说,您可以为enumerate() 生成的索引/计数指定为起始值,如果您不希望索引从默认值零开始

      前几天我正在打印文件中的行,并将 enumerate() 的起始值指定为 1,这在向用户显示有关特定行的信息时比 0 更有意义。

      【讨论】:

        【解决方案4】:

        enumerate 是你想要的:

        for i, s in enumerate(S):
            print s, i
        

        【讨论】:

          【解决方案5】:
          >>> for i, s in enumerate(S):
          

          【讨论】:

            【解决方案6】:

            enumerate() 让这个更漂亮:

            for index, value in enumerate(S):
                print index, value
            

            请参阅here 了解更多信息。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-09-17
              • 2014-05-11
              • 1970-01-01
              • 1970-01-01
              • 2021-12-14
              • 1970-01-01
              • 2013-05-26
              相关资源
              最近更新 更多