Я видел этот фрагмент кода, который перебирает определенные члены класса, если они существуют. Примечательно, что в двоичном дереве итерация по дочернему элементу, пока дочерних элементов больше нет.
Двоичное дерево определяется как ..
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
и они повторили это так:
# type root : TreeNode
def iterateTree(self, root):
level_list = [root]
while level_list:
for item in level_list:
print(item.val)
# This iterable seems really complicated for me to understand how they came up with this
level_list = [child for node in level_list for child in (node.left, node.right) if child]
Я не уверен, как они придумали эту строку для перебора левого и правого узла, я бы никогда не придумал это на месте ... Как бы я проанализировал эту строку?