Python 每十年检索一次
我尝试检索代码最少的十年列表:Python 每十年检索一次,python,Python,我尝试检索代码最少的十年列表: def get_decade_list(start, end): nl = [] while start < end: l = list(range(start, start+10)) start += 10 nl.append(l) return nl print get_decade_list(2001, 2201) 如何以Python的方式完成这样的任务?在Python2.7中,
def get_decade_list(start, end):
nl = []
while start < end:
l = list(range(start, start+10))
start += 10
nl.append(l)
return nl
print get_decade_list(2001, 2201)
如何以Python的方式完成这样的任务?在Python2.7中,我会这样做
[range(i, i + 10) for i in range(2001, 2201, 10)]
作为Python 2.7中的生成器
(range(i, i + 10) for i in xrange(2001, 2201, 10))
我不确定要求,但看起来您希望在给定范围内每10年返回一个值。您可以在一行中完成此操作,如下所示:
范围(2001、2211、10)
这将产生:
[2001、2011、2021、2031、2041、2051、2051、2061、2071、2081、2091、2101、2111、2121、2131、2141、2151、2161、2171、2181、2191、2201]
[[x for x in range(i, i + 10)] for i in range(2001, 2201, 10)]
它返回Python2和Python3下的列表
[[2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010],
[2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020],
[2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030],
[2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040],
... (omitted)
[2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200]]
使用一些python技巧:
:创建迭代器iter
:将列表中的元素相乘]*10
:来自izip
:它是解压函数izip(*args)
:转换每个元素映射
from itertools import izip
def get_decade_list(start, end):
args = [iter(xrange(start, end))] * 10
return list(map(list, izip(*args)))
print get_decade_list(2001, 2201)
结果是:
[[2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010],
...
[2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200]]
如果
end
不是XX01,则有一些区别,这个版本只能使用整整十年。python2或python3?print
不带括号意味着python2,但实际上,我会在pytho3中发布一个解决方案,只是为了推动OP实现这一点。关于范围(20012201,10)呢
?我认为代码中存在开销:范围
(在py27中)已返回元素的列表。看起来更像是列表列表,最里面的列表包含构成十年的所有年份。i、 e.2001年、2010年、2011年、2020年
[[2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010],
...
[2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200]]