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]]