2009-05-20 78 views
1
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給我代碼錯誤。如何使用計數器在for循環蟒蛇

有沒有其他方法可以做到這一點?

+0

請考慮刪除django和facebook標記 – 2009-05-20 08:28:46

+1

請包含實際的錯誤消息。 – 2009-05-20 11:08:23

回答

1

counter + = 1

但這不是問題。什麼是錯誤?縮進錯誤可能?

2

您看到的錯誤是因爲您在str_date_list列表中超出範圍而不是因爲您正在增加變量。

比較循環打印的counter的最大值(30)與列表長度(len(str_date_list))。由於索引編制從0開始,將最大索引編入長度爲n is n - 1的列表中。

2

您不必重複循環迭代變量和計數器:

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') 

for i in xrange(len(my_date_list)-1): 
    daily_user_status_list=[] 
    print i 
    val_time1 = str_date_list[i] 
    val_time2 = str_date_list[i + 1] 
2
  1. 你並不需要創建一個迭代器會通0-31 可以使用例如列舉

    對於我,SDATE在枚舉(str_date_list): 打印我,SDATE

  2. 如果您正在使用ITER沒有項目和計數器一樣嗎?

0

更好的寫:

str_date_list=[] 
for n in xrange(1,32): 
    str_date_list.append(str(n).zfill(2)+'-'+'05' + '-' +'09') 

for i in xrange(len(str_date_list)): 
    daily_user_status_list=[] 
    print i 
    val_time1 = str_date_list[i] 
    val_time2 = str_date_list[i + 1] 
  • 的xrange給了我們在指定範圍的自然數的(相當進行)迭代器。
  • 我們使用zfill,以確保有一個前導零,而不是寫他們都明確地
  • 避免迭代出來的數組邊界是很重要的!
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') 
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...