我试图遍历列表(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)
答案 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语句。