追加到lis时出现“列表索引超出范围”错误

2024-05-01 22:01:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图遍历一个列表(a)来创建另一个列表(B)。如果列表A中的条目与列表A中的上一个条目相同,我想用列表B中上一个条目的相同值附加列表B。如果列表A中的条目不相同,我想增加列表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)

Tags: of目的列表forifcount错误条目
3条回答

我觉得你犯了点小错误 您应该删除第一个if语句:

if i == 1:
        continue

我把它去掉了,得到了你想要的结果。你知道吗

记住,列表索引以0开头。 您的语句说“跳过第二个元素(索引1)”。而实际上您想跳过第一个元素(索引0)。你知道吗

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

你可以用这样的方法:

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]

当您尝试分配给case_day_count[1]时,case_day_count的初始长度为1,这将是1元素列表的第二个元素,因此它会导致IndexError。你知道吗

如果将case_day_count初始化为:

case_day_count = [0, 0]

你会得到你想要的名单。你知道吗

相关问题 更多 >