Index: Objects/rangeobject.c =================================================================== --- Objects/rangeobject.c (revision 56666) +++ Objects/rangeobject.c (working copy) @@ -129,12 +129,31 @@ return rtn; } +static int +range_contains(rangeobject *r, PyIntObject *key) { + if (PyInt_Check(key)) { + int keyval = key->ob_ival; + int start = r->start; + int step = r->step; + int end = start + (r->len * step); + + if ((step < 0 && keyval <= start && keyval > end) \ + || (step > 0 && keyval >= start && keyval < end)) { + return ((keyval - start) % step) == 0; + } + } + return 0; +} + static PySequenceMethods range_as_sequence = { (lenfunc)range_length, /* sq_length */ 0, /* sq_concat */ 0, /* sq_repeat */ (ssizeargfunc)range_item, /* sq_item */ 0, /* sq_slice */ + 0, /* sq_ass_item */ + 0, /* sq_ass_slice */ + (objobjproc)range_contains, /* sq_contains */ }; static PyObject * range_iter(PyObject *seq);