Your code is mostly good, only minor improvements are possible:
Use a conditional expression in place of a statement
A conditional statement, like the one you used may execute two completely different branches, instead a conditional expression can only return a value. This simplifies and shortens code a bit:
if rchild < n and l[lchild] < l[rchild]:
child = rchild
child = lchild
child = rchild if rchild < n and l[lchild] < l[rchild] else lchild
To make it clear that you are just deciding what the value of
child should be and nothing else.
Give nice names to public arguments
l is one letter long and is easily confused with
1, at least at small font sizes. Formal parameters names are the first form of documentation and should be given though. For example I suggest
xs (a FP convention).
Write an additional helper:
Both Wikipedia and Rosetta Code make use of the
heapify helper, writing it into your code will make it more readable by making it similar to these descriptions.
Also the additional function will make it more clear that a heap is being created at first and then the actual sorted-list construction begins by taking elements from the heap.