Python:嵌套列表理解/展平,转换到外部列表时无法访问

时间:2015-07-12 17:28:19

标签: python list multidimensional-array list-comprehension nested-loops

(我希望这不是一个重复,但其他问题太多而且命名不好,如果是这样的话......)

(在Python中测试> 3,解决方案 - 如果有的话 - 必须在> = 2.7下工作)

假设我们有一个清单:

class MyUser(AbstractBaseUser):
  ...
  ...

  def has_perm(self, perm, obj=None):
    return self.is_superuser

  def has_module_perms(self, app_label):
    return self.is_superuser

我们尝试使用标准列表推导方法将其展平:

l = [[1,2], [3,4], [5,6]]

输出:

[v for sl in l for v in sl] == [1,2,3,4,5,6]

然后我们尝试:

True

导致:

[(v, s1[0]) for sl in l for v in sl]

为什么会这样? 因为for循环被评估为循环,所以isn&#t; t NameError: name 's1' is not defined 应该是可访问的,因为循环应该被评估为:

s1

或换句话说:

[<expression> for <outer> in <list> for <inner> in <outer>]

我错过了什么?

1 个答案:

答案 0 :(得分:2)

看来你混淆了名字sl(“ess-ell”)和s1(“ess-one”)。

作为附录,您应该考虑切换到特定于程序员的字体,该字体强调其他潜在模糊字符之间的差异。一个流行的选项是Source Code Pro