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

Python: Nested list comprehension / Flatten, no access in transform to outer list

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

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

假设我们有一个列表:

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]

导致:

NameError: name 's1' is not defined

为什么会这样? s1 不应该是可访问的,因为 for 循环被评估为循环应该被评估为:

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

或者换句话说:

r = []
for <outer> in <list>:
   for <inner> in <outer>:
      r.append(<inner>)

我错过了什么?

您似乎混淆了名称 sl ("ess-ell") 与 s1 ("ess-one")。

作为附录,您应该考虑切换到程序员特定的字体,该字体强调其他可能有歧义的字符之间的差异。一种流行的选择是 Source Code Pro.