Python列表理解结果差异

Kan*_*amy -3 python list-comprehension list python-3.x

我正在研究 python 3 中的列表推导。当我遇到这种我不理解的行为时。期待向某人学习为什么会发生这种情况。

>>> chess_board = [[(i,j) if(i not in (0,7) and j not in (0,7)) else '—-' for i in range(8)] for j in range(8)]
>>> # **behavior 1** : using for loop to print
>>> for row in chess_board:
...     print(row)
...
['—-', '—-', '—-', '—-', '—-', '—-', '—-', '—-']
['—-', (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), '—-']
['—-', (1, 2), (2, 2), (3, 2), (4, 2), (5, 2), (6, 2), '—-']
['—-', (1, 3), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3), '—-']
['—-', (1, 4), (2, 4), (3, 4), (4, 4), (5, 4), (6, 4), '—-']
['—-', (1, 5), (2, 5), (3, 5), (4, 5), (5, 5), (6, 5), '—-']
['—-', (1, 6), (2, 6), (3, 6), (4, 6), (5, 6), (6, 6), '—-']
['—-', '—-', '—-', '—-', '—-', '—-', '—-', '—-']
>>> # **behavior 2** using list comprehension
>>> [print(row) for row in chess_board]
['—-', '—-', '—-', '—-', '—-', '—-', '—-', '—-']
['—-', (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), '—-']
['—-', (1, 2), (2, 2), (3, 2), (4, 2), (5, 2), (6, 2), '—-']
['—-', (1, 3), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3), '—-']
['—-', (1, 4), (2, 4), (3, 4), (4, 4), (5, 4), (6, 4), '—-']
['—-', (1, 5), (2, 5), (3, 5), (4, 5), (5, 5), (6, 5), '—-']
['—-', (1, 6), (2, 6), (3, 6), (4, 6), (5, 6), (6, 6), '—-']
['—-', '—-', '—-', '—-', '—-', '—-', '—-', '—-']
[None, None, None, None, None, None, None, None]
>>>
Run Code Online (Sandbox Code Playgroud)

为什么在使用列表理解打印时会打印一行 [None、None、None、None、None、None、None、None]?

bru*_*ers 5

1/ 列表推导式 ( [something for item in iterable]) 产生一个list.

2/print()返回None

3/ 你的 Python shell 总是打印最后一个被评估的表达式的结果。

所以你看到的是你的列表表达式的结果。

FWIW,列表推导式不应该用于副作用 - 这是一种资源浪费,并且对可读性没有帮助。