Index: Python/bltinmodule.c =================================================================== --- Python/bltinmodule.c (revision 66965) +++ Python/bltinmodule.c (working copy) @@ -1201,6 +1201,64 @@ static PyObject * +min_max_list(PyObject *v, int op, PyObject *keyfunc) +{ + PyObject *item, *val, *maxitem, *maxval; + SSIZE_T i, size; + int cmp; + + maxitem = PyList_GET_ITEM(v, 0); + if (keyfunc != NULL) { + maxval = PyObject_CallFunctionObjArgs(keyfunc, maxitem, NULL); + if (maxval == NULL) + return NULL; + } else { + maxval = maxitem; + Py_INCREF(maxval); + } + + size = PyList_GET_SIZE(v); + for(i = 1; i 0) { + Py_DECREF(maxval); + maxval = val; + maxitem = item; + } + else { + Py_DECREF(val); + } + } + Py_DECREF(maxval); + Py_INCREF(maxitem); + return maxitem; + +Fail_it_val: + Py_DECREF(val); +Fail_it: + Py_XDECREF(maxval); + return NULL; +} + + +static PyObject * min_max(PyObject *args, PyObject *kwds, int op) { PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL; @@ -1221,6 +1279,12 @@ Py_INCREF(keyfunc); } + if (PyList_Check(v) && PyList_GET_SIZE(v) > 0) { + maxitem = min_max_list(v, op, keyfunc); + Py_XDECREF(keyfunc); + return maxitem; + } + it = PyObject_GetIter(v); if (it == NULL) { Py_XDECREF(keyfunc);