给定一个列表A
,其中包含多个子列表,每个子列表由[yyyy, value]
形式的元素组成,且子列表中的元素按年份递增顺序排列。目标是为列表A
中的每个子列表插入所有缺失的年份,并确保年份顺序保持不变。
2、解决方案
为了解决这个问题,我们需要通过以下步骤:
- 确定年份范围:找到列表
A
中所有子列表的最小年份和最大年份,并将其分别存储在变量min_year
和max_year
中。 - 创建新列表:创建一个新列表
new_a
,它将包含所有子列表中的年份和值,并按年份顺序排列。 - 迭代子列表:遍历列表
A
中的每个子列表,并执行如下操作:- 获取子列表中的年份值,并将其存储在变量
years
中。 - 对于年份范围内的每个年份,如果该年份不在
years
中,则在子列表中添加一个年份和值对[year, 0]
。 - 对子列表进行排序,以确保年份顺序正确。
- 获取子列表中的年份值,并将其存储在变量
- 将子列表添加到新列表
new_a
中。 - 返回新列表
new_a
。
def insert_missing_dates(A, min_year, max_year):
new_a = []
for group in A:
years = [point[0] for point in group]
for year in range(min_year, max_year + 1):
if year not in years:
group.append([year, 0])
group.sort()
new_a.append(group)
return new_a
A = [
[[2008, 5], [2009, 5], [2010, 2], [2011, 5], [2013, 17]],
[[2008, 6], [2009, 3], [2011, 1], [2013, 6]],
[[2013, 9]],
[[2008, 4], [2011, 1], [2013, 4]],
[[2010, 3], [2011, 3], [2013, 1]],
[[2008, 2], [2011, 4], [2013, 1]],
[[2009, 1], [2010, 1], [2011, 3], [2013, 3]],
[[2010, 1], [2011, 1], [2013, 5]],
[[2011, 1], [2013, 4]],
[[2009, 1], [2013, 4]],
[[2008, 1], [2013, 3]],
[[2009, 1], [2013, 2]],
[[2013, 2]],
[[2011, 1], [2013, 1]],
[[2013, 1]],
[[2013, 1]],
[[2011, 1]],
[[2011, 1]]
]
min_year = 2008
max_year = 2013
new_a = insert_missing_dates(A, min_year, max_year)
print(new_a)
输出:
[
[[2008, 5], [2009, 5], [2010, 2], [2011, 5], [2012, 0], [2013, 17]],
[[2008, 6], [2009, 3], [2010, 0], [2011, 1], [2012, 0], [2013, 6]],
[[2008, 0], [2009, 0], [2010, 0], [2011, 0], [2012, 0], [2013, 9]],
[[2008, 4], [2009, 0], [2010, 0], [2011, 1], [2012, 0], [2013, 4]],
[[2008, 0], [2009, 0], [2010, 3], [2011, 3], [2012, 0], [2013, 1]],
[[2008, 2], [2009, 0], [2010, 0], [2011, 4], [2012, 0], [2013, 1]],
[[2008, 0], [2009, 1], [2010, 1], [2011, 3], [2012, 0], [2013, 3]],
[[2008, 0], [2009, 0], [2010, 1], [2011, 1], [2012, 0], [2013, 5]],
[[2008, 0], [2009, 0], [2010, 0], [2011, 1], [2012, 0], [2013, 4]],
[[2008, 0], [2009, 1], [2010, 0], [2011, 0], [2012, 0], [2013, 4]],
[[2008, 1], [2009, 0], [2010, 0], [2011, 0], [2012, 0], [2013, 3]],
[[2008, 0], [2009, 1], [2010, 0], [2011, 0], [2012, 0], [2013, 2]],
[[2008, 0], [2009, 0], [2010, 0], [2011, 0], [2012, 0], [2013, 2]],
[[2008, 0], [2009, 0], [2010, 0], [2011, 1], [2012, 0], [2013, 1]],
[[2008, 0], [2009, 0], [2010, 0], [2011, 0], [2012, 0], [2013, 1]],
[[2008, 0], [2009, 0], [2010, 0], [2011, 0], [2012, 0], [2013, 1]],
[[2008, 0], [2009, 0], [2010, 0], [2011, 1], [2012, 0], [2013, 0]],
[[2008, 0], [2009, 0], [2010, 0], [2011, 1], [2012, 0], [2013, 0]]