code: def n_list_comp(self, node):
          
          p = self.prec
          self.prec = 100
          if self.version >= 2.7:
              if self.is_pypy:
                  self.n_list_comp_pypy27(node)
                  return
              n = node[-1]
          elif node[-1] == 'del_stmt':
              if node[-2] == 'JUMP_BACK':
                  n = node[-3]
              else:
                  n = node[-2]
  
          assert n == 'list_iter'
  
          # Find the list comprehension body. It is the inner-most
          # node that is not list_.. .
          # FIXME: DRY with other use
          while n == 'list_iter':
              n = n[0]  # iterate one nesting deeper
              if   n == 'list_for':	n = n[3]
              elif n == 'list_if':	n = n[2]
              elif n == 'list_if_not': n = n[2]
          assert n == 'lc_body'
          self.write( '[ ')
  
          if self.version >= 2.7:
              expr = n[0]
              list_iter = node[-1]
          else:
              expr = n[1]
              if node[-2] == 'JUMP_BACK':
                  list_iter = node[-3]
              else:
                  list_iter = node[-2]
  
          assert expr == 'expr'
          assert list_iter == 'list_iter'
  
          # FIXME: use source line numbers for directing line breaks
  
          line_number = self.line_number
          last_line = self.f.getvalue().split("\n")[-1]
          l = len(last_line)
          indent = ' ' * (l-1)
  
          self.preorder(expr)
          line_number = self.indent_if_source_nl(line_number, indent)
          self.preorder(list_iter)
          l2 = self.indent_if_source_nl(line_number, indent)
          if l2 != line_number:
              self.write(' ' * (len(indent) - len(self.indent) - 1) + ']')
          else:
              self.write( ' ]')
          self.prec = p
          self.prune()
docs: List comprehensions