首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用计数器的python中的for循环?

使用计数器的python中的for循环?
EN

Stack Overflow用户
提问于 2018-06-11 02:18:19
回答 2查看 125关注 0票数 3

如何创建一个带有计数器的for循环?我有一个列表,我想在每个n元素之后读取一个元素。我最初是这么做的

代码语言:javascript
复制
for i in enumerate(n):
    print(i)

但是正如预期的那样,它打印每个元素,而不是每第n个元素,那么Python解决这个问题的方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-11 02:22:30

我不确定哪种值是n,但通常有这样的方式:(对我来说,n是一个列表)

代码语言:javascript
复制
for index, item in enumerate(n):
   if index % nth == 0: # If the output is not like you want, try doing (index + 1), or enumerate(n, start=1).
       print(item)

另一种方式可能是:

代码语言:javascript
复制
for index in range(0, len(n), nth): # Only work with sequences
   print(n[index]) # If the output is not like you want, try doing n[index + 1]

或者:

代码语言:javascript
复制
for item in n[::nth]: # Low perfomance and hight memory consumption warning!! Only work with sequences
    print(item)

甚至你也可以把第一个和最后一个结合起来:

代码语言:javascript
复制
for i, item in list(enumerate(n))[::nth]: # Huge low perfomance warning!!!
    print(item)

但我不确定这是否有优势。

此外,如果您愿意创建一个函数,则可以执行类似于enumerate函数的操作:

代码语言:javascript
复制
def myEnumerate(sequence, start=0, jump=1):
    n = start
    j = start // Or j = 0, that is your decision.
    for elem in sequence:
        if j % jump == 0:
            yield n, elem
            n += 1
        j += 1

for index, item in myEnumerate(n, jump=1):
    print(item)

就我个人而言,我不会做最后一个。我不知道为什么,但这是一种感觉。

性能测试

代码语言:javascript
复制
n = 'a b c d e f g h i j k l m n ñ o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 ! " · $ % & / ( ) = ? ¿ Ç ç } { [ ] ; : _ ¨ ^ * ` + ´ - . , º ª \ /'.split(" ")
nth = 3    
def a():
    for i, item in enumerate(n):
       if i % nth == 0:
           item       
def b():
    for item in range(0, len(n), nth):
       n[item]           
def c():
    for item in n[::nth]:
        item    
def d():
    for i, item in list(enumerate(n))[::nth]:
       if i % nth == 0:
           item    
def enumerates(sequence, start=0, jump=1):
    n = start
    j = start
    for elem in sequence:
        if j % jump == 0:
            yield n, elem
            n += 1
        j += 1            
def e():
    for i, item in enumerates(n, jump= nth):
        item    
if __name__ == '__main__':
    import timeit
    print(timeit.timeit("a()", setup="from __main__ import a")) # 10.556324407152305
    print(timeit.timeit("b()", setup="from __main__ import b")) # 2.7166204783010137
    print(timeit.timeit("c()", setup="from __main__ import c")) # 1.0285353306076601
    print(timeit.timeit("d()", setup="from __main__ import d")) # 8.283859051918608
    print(timeit.timeit("e()", setup="from __main__ import e")) # 14.91601851631981

但如果你真的想获得更高的性能,你应该阅读@Martijn Pieters answer

票数 2
EN

Stack Overflow用户

发布于 2018-06-11 02:20:36

只需使用一个范围:

代码语言:javascript
复制
for i in range(0, size, n):
    print (i)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50786744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档