本题注意点:二维list的骚操作, 包括① 列表生成式,② map()
理解:
① 类比数据库中的SELECT…FROM…WHERE,如生成100以内的完全平方数
[x * x for x in range(1, 11) if x % 2 == 0]
上方代码得到一个list,然后还可以继续套sum、max等
② 参考链接 http://www.runoob.com/python/python-func-map.html
map(): 第一个参数 func对每一个元素调用 func函数,Python 2.x 返回列表,Python 3.x 返回迭代器。
import numpy as np
def projectionArea(grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
ans = sum(max(temp) for temp in grid)
for i in range(len(grid)):
ans += max(grid[j][i] for j in range(len(grid)))
ans += sum(int(grid[j][i] > 0) for j in range(len(grid)))
return ans
# version2: 列表生产式还可以使用两层循环,将二维展开成一维
# A = grid
# N = len(grid)
# r = sum([1 if A[i][j] > 0 else 0 for j in range(N) for i in range(N)])
# r += sum([max(A[i]) for i in range(N)])
# r += sum([max(A[j][i] for j in range(N)) for i in range(N)])
# return r
# version3:
# return sum(map(max, grid)) + sum(map(max, zip(*grid))) + sum(v > 0 for row in grid for v in row)
# samples:
grids = [
[[2]],
[[1,2],[3,4]],
[[1,0],[0,2]],
[[1,1,1],[1,0,1],[1,1,1]],
[[2,2,2],[2,1,2],[2,2,2]]
]
for grid in grids:
print(projectionArea(grid))