如何在Python中在for循环中使用计数器

1 投票
7 回答
8022 浏览
提问于 2025-04-15 11:43
my_date_list = ['01', '02', '03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31']
str_date_list=[]
for item in my_date_list:
    str_date_list.append(item+'-'+'05' + '-' +'09')

counter= 0
i = iter(range(31))
for item in i:
    daily_user_status_list=[]
    print counter
    val_time1 = str_date_list[counter]
    val_time2 = str_date_list[counter + 1]
    counter =counter + 1

我在执行 counter = counter + 1 这行代码时遇到了错误。其实,我每次都需要从我的 str_date_list 中获取不同的时间。但是,使用 counter = counter + 1 这行代码时出现了错误。

有没有其他方法可以做到这一点呢?

7 个回答

2
  1. 你不需要专门创建一个迭代器来遍历0到31的数字。你可以使用一个叫做enumerate的功能,比如这样:

    for i, sdate in enumerate(str_date_list):
        print i, sdate

  2. 如果你在使用iter的话,item和counter不是一样的吗?

4

为了好玩,这里有一种非常简洁的Python写法:

from itertools import izip, islice
str_date_list = ['%02d-05-09' % i for i in xrange(1, 32)]
for val_time1, val_time2 in izip(islice(str_date_list, 0, None), islice(str_date_list, 1, None)):
    daily_user_status_list = [ <whatever goes here> ]
    # more code...
8

你的计数器和你正在遍历的序列不太对劲了。而且更重要的是,这个计数器其实根本不需要。

你有几个手动遍历的过程,这些本来可以自动化的操作让你感到困扰。特别是,当你在遍历的时候,几乎不需要手动去跟踪一个计数器;Python的序列类型自己就会知道怎么遍历。

下面是我对上面代码意图的重新编写(在交互式解释器中展示它是如何工作的):

>>> dates = ["%(day)02d-05-09" % vars() for day in range(1, 31+1)]
>>> date_ranges = zip(dates[:-1], dates[1:])
>>> for (date_begin, date_end) in date_ranges:
...     print (date_begin, date_end)
... 
('01-05-09', '02-05-09')
('02-05-09', '03-05-09')
('03-05-09', '04-05-09')
…
('28-05-09', '29-05-09')
('29-05-09', '30-05-09')
('30-05-09', '31-05-09')

撰写回答