我尝试使用最少的代码检索数十年的列表:
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)
输出:
[[2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010],
[2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020],
...
[2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200],]
如何以pythonic方式完成这项任务?
答案 0 :(得分:4)
在Python 2.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))
答案 1 :(得分:2)
我不确定该要求,但看起来您想要在给定范围内每10年返回一个值。您可以在一行中执行此操作,如下所示:
range(2001, 2211, 10)
输出:
[2001, 2011, 2021, 2031, 2041, 2051, 2061, 2071, 2081, 2091, 2101, 2111, 2121, 2131, 2141, 2151, 2161, 2171, 2181, 2191, 2201]
答案 2 :(得分:2)
那将是
[[x for x in range(i, i + 10)] for i in range(2001, 2201, 10)]
返回Python 2和3下的列表列表。
[[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]]
答案 3 :(得分:0)
使用一些python技巧:
iter
:创建一个迭代器]*10
:将列表中的元素相乘izip
:来自itertools izip(*args)
:这是解压缩功能map
:转换每个元素和所有在一起:
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,则存在一些差异,此版本仅获得完整的十年。