我列出了从2003年到2005年的12月到2月的年份和日期。我想将此列表分成12月到2月的年份列表:
a = ['2003337', '2003345', '2003353', '2003361', '2004001', '2004009', '2004017', '2004025', '2004033', '2004041', '2004049', '2004057', '2004337', '2004345', '2004353', '2004361', '2005001', '2005009', '2005017', '2005025', '2005033', '2005041', '2005049', '2005057']
输出应该是:
b = [['2003337', '2003345', '2003353', '2003361', '2004001', '2004009', '2004017', '2004025', '2004033', '2004041', '2004049', '2004057'] ['2004337', '2004345', '2004353', '2004361', '2005001', '2005009', '2005017', '2005025', '2005033', '2005041', '2005049', '2005057']]
然后遍历每个列表列表。我可以使用even splitting,但有可能错过年份。所以最好不要均匀分割。有什么建议吗?
答案 0 :(得分:4)
转换为datetime,然后按结尾最近的年份分组。
import datetime
import itertools
#convert from a "year-day" string to a datetime object
def datetime_from_year_day(s):
year = int(s[:4])
days = int(s[4:])
return datetime.datetime(year=year, month=1, day=1) + datetime.timedelta(days=days-1)
#returns the year whose end is closest to the date, whether in the past or future
def nearest_year_end(d):
if d.month <= 6:
return d.year-1
else:
return d.year
a = ['2003337', '2003345', '2003353', '2003361', '2004001', '2004009', '2004017', '2004025', '2004033', '2004041', '2004049', '2004057', '2004337', '2004345', '2004353', '2004361', '2005001', '2005009', '2005017', '2005025', '2005033', '2005041', '2005049', '2005057']
result = [list(v) for k,v in itertools.groupby(a, lambda s: nearest_year_end(datetime_from_year_day(s)))]
print result
结果:
[['2003337', '2003345', '2003353', '2003361', '2004001', '2004009', '2004017', '2004025', '2004033', '2004041', '2004049', '2004057'], ['2004337', '2004345', '2004353', '2004361', '2005001', '2005009', '2005017', '2005025', '2005033', '2005041', '2005049', '2005057']]
答案 1 :(得分:0)
您也可以通过在for循环中嵌套2 if-else
来完成此操作。这也很容易理解
a = ['2003337', '2003345', '2003353', '2003361', '2004001', '2004009', '2004017', '2004025', '2004033', '2004041', '2004049', '2004057', '2004337', '2004345', '2004353', '2004361', '2005001', '2005009', '2005017', '2005025', '2005033', '2005041', '2005049', '2005057']
temp = []
b = []
for day in a:
if len(temp)==0:
temp.append(day)
else:
if int(temp[-1][4:]) < 60 and int(day[4:]) > 335:
b.append(temp)
temp = []
temp.append(day)
else:
temp.append(day)
print b
结果 -
[['2003337', '2003345', '2003353', '2003361', '2004001', '2004009', '2004017', '2004025', '2004033', '2004041', '2004049', '2004057'], ['2004337', '2004345', '2004353', '2004361', '2005001', '2005009', '2005017', '2005025', '2005033', '2005041', '2005049', '2005057']]