【问题标题】:python: list comp fill data conditionally [duplicate]python:有条件地列出comp填充数据[重复]
【发布时间】:2014-03-10 18:13:24
【问题描述】:

我正在使用以下代码生成一个二维列表。

grid = [[ 1 if i == 0 or j == 0 else 0  for i in range(size) ] for j in range(size)]

生成

[1, 1, 1]
[1, 0, 0] 
[1, 0, 0]

是否可以使用这些值来获取列表 comp 中的下一个值,例如

grid[1][1] = grid[0][1] + grid[1][0]

所以它看起来像

[1, 1, 1]
[1, 2, 3] 
[1, 3, 6]

我知道我可以迭代它并获得结果,但是列表理解是否有可能?

【问题讨论】:

  • 不,您不能在生成列表时查看其他值。
  • 您确定不是为了使用列表推导而尝试使用列表推导吗?
  • @msvalkon 我正在尝试为大小为 n 的网格生成点阵路径
  • @msvalkon 我正在创建一个包含格子路径的多维列表,第一行和第一列都将为 1,接下来将是通向该格子路径的点的总和,因此 x[1][1 ] 将是 x[0][1] + x[1][0]。如果我错了,请纠正我,因为在这种情况下最好使用 in 而不是列表理解或任何其他方式?
  • @DeepakML 列表推导是一种强大且吸引人的语言功能,但在我看来应该适当使用。不要仅仅因为列表推导很酷而牺牲可读性。

标签: python python-2.7 list-comprehension


【解决方案1】:

似乎以迭代方式更容易完成:

size = 5

grid = [[1 for i in range(size)] for j in range(size)]
for i in range(1, size):
    for j in range(1, size):
        grid[i][j] = grid[i-1][j] + grid[i][j-1]

print grid

结果(我手动添加的间距):

[
    [1, 1,  1,  1,  1], 
    [1, 2,  3,  4,  5], 
    [1, 3,  6, 10, 15], 
    [1, 4, 10, 20, 35], 
    [1, 5, 15, 35, 70]
]

【讨论】:

  • 谢谢凯文,我也是这样做的,正在检查是否也可以使用 list comp 来实现,我是 python 新手,list comp 看起来真的很酷,所以也许我使用的是没有理由的.
猜你喜欢
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 2017-01-08
  • 2019-11-27
相关资源
最近更新 更多