Python 2 和 Python 3 列表推导的区别

测试了一个列表推导,在 Python 3 中无法运行,大牛能否给个说明?

# python2  
matrix = [[1,2,3],[4,5,6],[7,8,9]]
[x for row in matrix for x in row]
# 值是 [1, 2, 3, 4, 5, 6, 7, 8, 9]
[x for x in row for row in matrix]
# 值是 [7, 7, 7, 8, 8, 8, 9, 9, 9]
# python3  
matrix = [[1,2,3],[4,5,6],[7,8,9]]
[x for row in matrix for x in row]
# 值是 [1, 2, 3, 4, 5, 6, 7, 8, 9]
[x for x in row for row in matrix]
# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
# NameError: name 'row' is not defined
阅读 2k
2 个回答

这和python没关系,你测试能运行,是因为你先运行了[x for row in matrix for x in row],这时row变量是存在的所以没报错

你的第二种写法[x for x in row for row in matrix]本身就是错的,你在python2里先执行了[x for row in matrix for x in row],这时候row就被声明了,不信你print(row)看看,或者你在python2里执行

matrix = [[1,2,3],[4,5,6],[7,8,9]]

[x for row in matrix for x in row]

[x for x in _row for _row in matrix]

看看最后一句报不报错

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题