【问题标题】:How to get list index and element simultaneously in Python? [duplicate]如何在 Python 中同时获取列表索引和元素? [复制]
【发布时间】:2011-01-05 13:21:24
【问题描述】:

我发现自己经常写这样的代码:

k = 0
for i in mylist:
    # y[k] = some function of i
    k += 1

相反,我可以这样做

for k in range(K):
    # y[k] = some function of mylist[k]

但这似乎不是“pythonic”。 (你知道......索引。Ick!)是否有一些语法允许我使用循环、列表理解或生成器同时提取索引(k)和元素(i)?任务是科学计算,所以循环体中有很多东西,我认为列表解析本身可能不够强大。

我也欢迎有关相关概念的提示,尽管我可能没有。谢谢。

【问题讨论】:

    标签: python


    【解决方案1】:

    你可以使用enumerate:

    for k,i in enumerate(mylist):
        #do something with index k
        #do something with element i
    

    更多关于looping techniques的信息。

    编辑:
    正如 cmets 中所指出的,使用其他变量名称,如

    for i, item in enumerate(mylist):
    

    从长远来看使您的代码更容易阅读和理解。通常您应该使用ijk 来表示数字,并使用meaningful variable names 来描述列表的元素。
    IE。如果你有例如书籍列表并对其进行迭代,然后您应该将变量命名为book

    【讨论】:

    • enumerate 还允许您使用 start 参数在您喜欢的位置启动索引。这有时很方便。 docs.python.org/library/functions.html#enumerate
    • 我可能独自一人,但使用i 作为变量来保存可迭代的每个元素会使我在阅读这段代码时感到厌烦。 ij 不是循环代码中索引的标准变量名吗?
    • 但如果您只想遍历列表的某些元素而不是整个列表,请小心。 start 参数是分配给第一个被拉出的项目的编号,而不是原始列表中的索引。如果你写 for i, item in enumerate(mylist, start=12) 那么你从列表中获取每个项目,我从 12 开始计数。同样,如果你只经过一个切片,但不设置开始,然后我从 0 开始。希望这对某人有所帮助。
    【解决方案2】:

    enumerate 是答案:

    for index, element in enumerate(iterable):
        #work with index and element
    

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 1970-01-01
      • 2011-05-05
      • 2016-04-17
      • 2022-08-17
      • 2021-10-09
      • 2011-02-06
      • 1970-01-01
      • 2020-01-20
      相关资源
      最近更新 更多