'列出索引超出范围'附加到列表时出错

时间:2015-03-26 04:25:21

标签: python

我试图遍历列表(A)来创建另一个列表(B)。如果列表A中的条目与列表A中的上一个条目相同,我想要从列表B中的上一个条目添加具有相同值的列表B.如果列表A中的条目不相同,我将&#39 ; d想要增加列表B中的计数。例如,对于

list A = ['2014-06-01', '2014-06-01', '2014-06-02', '2014-06-03', '2014-06-03', '2014-06-03'] 

我想要

list B = [0, 0, 1, 2, 2, 2]

我的排名索引超出范围'错误,我不明白为什么。

list_of_dates = ['2014-06-01', '2014-06-01', '2014-06-02', '2014-06-03', '2014-06-03', '2014-06-03']

case_day_count = [0]
for i in xrange(1,len(list_of_dates)): 
    if i == 1:
        continue
    if list_of_dates[i] == list_of_dates[(i-1)]:
        case_day_count.append(case_day_count[(i-1)])
    else:
        case_day_count.append(case_day_count[(i-1)]+1)

3 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

import itertools
list_of_dates = ['2014-06-01', '2014-06-01', '2014-06-02',
                 '2014-06-03', '2014-06-03', '2014-06-03']

case_day_count = [0]
for (a,b) in itertools.izip(list_of_dates[:-1], list_of_dates[1:]):
    case_day_count.append(case_day_count[-1] + int(a != b))

print(case_day_count)

但可能不太清楚这里发生了什么。相反,这可能是一个更好的妥协:

import itertools
list_of_dates = ['2014-06-01', '2014-06-01', '2014-06-02',
                 '2014-06-03', '2014-06-03', '2014-06-03']

case_day_count = [0]
for (a,b) in itertools.izip(list_of_dates[:-1], list_of_dates[1:]):
    last_count = case_day_count[-1]
    next_count = last_count + (1 if a != b else 0)
    case_day_count.append(next_count)

print(case_day_count)

两者都产生[0, 0, 1, 2, 2, 2]

答案 1 :(得分:1)

当您尝试分配case_day_count时,

case_day_count[1]的初始长度为1,这将是1个元素列表的第2个元素,因此会导致IndexError。< / p>

如果您将case_day_count初始化为:

case_day_count = [0, 0]

您将获得预期的清单。

答案 2 :(得分:0)

我认为你在这里犯了一点错误 你应该删除第一个if语句:

if i == 1:
        continue

我已将其删除,并按照您的意愿获得预期结果。

记住列表索引从0开始。 你的陈述说“跳过第二个元素(索引1)”。而你实际上想要跳过第一个元素(索引0)。

因为你从第二个元素(索引1)开始,所以你不需要这个if语句。