我想创建每月每月列表的嵌套列表列表:
[[ 31, 29, 31, 30 ], [ 31, 28, 31, 30 ] ]
与
mm = [ 1, 2, 3, 4 ]
yy = [ 2012, 2013 ]
但是我的代码:
[ [ result.append( calendar.monthrange( y, m )[ 1 ] ) for m in mm] for y in yy ]
产生
[31, 29, 31, 30, 31, 28, 31, 30 ]
有人可以告诉我我做错了什么吗?谢谢。 BSL
答案 0 :(得分:2)
所以,我假设完整代码看起来像这样:
result = []
[ [ result.append( calendar.monthrange( y, m )[ 1 ] ) for m in mm] for y in yy ]
print(result)
您的代码存在的问题是您对列表理解的理解。列表理解会创建一个列表,因此您不应将任何内容附加到其中的任何列表中。现在,您只是将结果附加到结果然后打印结果,现在实际上是从列表推导中创建一个列表。
这就是你现在正在做的事情的等价物:
result = [ ]
for y in yy:
for m in mm:
result.append( calendar.monthrange( y, m )[ 1 ] )
这相当于你想要做的事情:
result = [ ]
for y in yy:
year = []
for m in mm:
year.append( calendar.monthrange( y, m )[ 1 ] )
result.append(year)
这是列表理解版本:
>>> result = [[calendar.monthrange( y, m )[ 1 ] for m in mm] for y in yy]
>>> print(result)
[[31, 29, 31, 30], [31, 28, 31, 30]]