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.
(我希望这不是重复的,但如果是的话,其他问题太多而且命名不当......)
(在 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.