代码之家  ›  专栏  ›  技术社区  ›  Ruslan199

python中的条件列出了理解

  •  0
  • Ruslan199  · 技术社区  · 1 年前

    编码员朋友们!请帮助python代码中的条件列表理解。那个语法的错误在哪里?

    matrix = [
      [matrix[i][j] = '.' if matrix[i][j] % 2 == 0 else matrix[i][j] = '*' for i in range(int(col))] 
      for j in range(int(row))
    ] 
    

    不知道如何解决这个问题。

    2 回复  |  直到 1 年前
        1
  •  1
  •   Grismar    1 年前

    虽然你没有提供所需结果的描述,但很可能你是在追求这个:

    matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    
    col = 3
    row = 3
    
    matrix = [
      ['.' if matrix[i][j] % 2 == 0 else '*' for i in range(int(col))]
      for j in range(int(row))
    ]
    
    print(matrix)
    

    输出

    [['*', '.', '*'], ['.', '*', '.'], ['*', '.', '*']]
    

    它产生了一个新的 matrix 用一个 '.' 代替每个偶数值和 '*' 代替每个奇数,并将结果分配给 矩阵 ,覆盖原始数据。

    关于您共享的代码的几点备注:

    • 您正在将新创建的列表分配给 矩阵 ,但也有赋值语句(即。 [matrix[i][j] = )在中 list comprehension ,这不起作用。
    • 你有 int(col) int(row) 表明这些不是 int 一开始的价值观;在我的例子中,它们是,但由于您没有提供定义它们的代码,因此需要进行一些猜测,我将它们保留了下来。我假设它们表示嵌套列表的大小 矩阵 .

    正如用户@Chris在评论中所指出的,解决您问题的更简洁的方法是:

    matrix = [['.' if x % 2 == 0 else '*' for x in row] for row in matrix]
    

    这完全避免了使用索引,也适用于不形成矩形矩阵的嵌套列表。

        2
  •  1
  •   Chris    1 年前

    条件表达式中的赋值显然是错误的。

    也许 想要使用 walrus operator ( := 相反需要更多关于你实际尝试做什么的细节,以确定这是否有帮助。请记住,列表理解通常仅用于生成新列表,而不是修改现有列表。用它们来代替一个循环,我觉得这显然是“非Python的”