##
7.3.5 List Objects

`PyListObject`
  This subtype of `PyObject` represents a Python list object.

PyTypeObject `PyList_Type`
  This instance of `PyTypeObject` represents the Python list type. This is the same object as `types.ListType`.

int `PyList_Check`(PyObject *p)
  Returns true if its argument is a `PyListObject`.

PyObject* `PyList_New`(int len)
  Return value: New reference.
  Returns a new list of length len on success, or `NULL` on failure.

int `PyList_Size`(PyObject *list)
  Returns the length of the list object in list; this is equivalent to "`len(list)`" on a list object.

int `PyList_GET_SIZE`(PyObject *list)
  Macro form of `PyList_Size()` without error checking.

PyObject* `PyList_GetItem`(PyObject *list, int index)
  Return value: Borrowed reference.
  Returns the object at position pos in the list pointed to by p. If pos is out of bounds, returns `NULL` and sets an `IndexError` exception.

PyObject* `PyList_GET_ITEM`(PyObject *list, int i)
  Return value: Borrowed reference.
  Macro form of `PyList_GetItem()` without error checking.

int `PyList_SetItem`(PyObject *list, int index, PyObject *item)
  Sets the item at index index in list to item. Returns `0` on success or `-1` on failure. Note: This function ``steals'' a reference to item and discards a reference to an item already in the list at the affected position.

void `PyList_SET_ITEM`(PyObject *list, int i, PyObject *o)
  Macro form of `PyList_SetItem()` without error checking. Note: This function ``steals'' a reference to item, and, unlike `PyList_SetItem()`, does not discard a reference to any item that it being replaced; any reference in list at position i will be leaked. This is normally only used to fill in new lists where there is no previous content.

int `PyList_Insert`(PyObject *list, int index, PyObject *item)
  Inserts the item item into list list in front of index index. Returns `0` if successful; returns `-1` and raises an exception if unsuccessful. Analogous to `list.insert(index, item)`.

int `PyList_Append`(PyObject *list, PyObject *item)
  Appends the object item at the end of list list. Returns `0` if successful; returns `-1` and sets an exception if unsuccessful. Analogous to `list.append(item)`.

PyObject* `PyList_GetSlice`(PyObject *list, int low, int high)
  Return value: New reference.
  Returns a list of the objects in list containing the objects between low and high. Returns NULL and sets an exception if unsuccessful. Analogous to `list[low:high]`.

int `PyList_SetSlice`(PyObject *list, int low, int high, PyObject *itemlist)
  Sets the slice of list between low and high to the contents of itemlist. Analogous to `list[low:high] = itemlist`. Returns `0` on success, `-1` on failure.

int `PyList_Sort`(PyObject *list)
  Sorts the items of list in place. Returns `0` on success, `-1` on failure. This is equivalent to "`list.sort()`".

int `PyList_Reverse`(PyObject *list)
  Reverses the items of list in place. Returns `0` on success, `-1` on failure. This is the equivalent of "`list.reverse()`".

PyObject* `PyList_AsTuple`(PyObject *list)
  Return value: New reference.
  Returns a new tuple object containing the contents of list; equivalent to "`tuple(list)`".