在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Python/ Python 2 和 Python 3 列表推導(dǎo)的區(qū)別

Python 2 和 Python 3 列表推導(dǎo)的區(qū)別

測(cè)試了一個(gè)列表推導(dǎo),在 Python 3 中無(wú)法運(yùn)行,大牛能否給個(gè)說(shuō)明?

# 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
回答
編輯回答
巷尾

你的第二種寫(xiě)法[x for x in row for row in matrix]本身就是錯(cuò)的,你在python2里先執(zhí)行了[x for row in matrix for x in row],這時(shí)候row就被聲明了,不信你print(row)看看,或者你在python2里執(zhí)行

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]

看看最后一句報(bào)不報(bào)錯(cuò)

2017年12月31日 09:02
編輯回答
故林

這和python沒(méi)關(guān)系,你測(cè)試能運(yùn)行,是因?yàn)槟阆冗\(yùn)行了[x for row in matrix for x in row],這時(shí)row變量是存在的所以沒(méi)報(bào)錯(cuò)

2017年6月21日 20:50