Patches item #1491804, was opened at 2006-05-19 15:19 Message generated for change (Comment added) made by collinwinter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1491804&group_id=5470
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Core (C code) Group: Python 2.5 Status: Open Resolution: None Priority: 5 Private: No Submitted By: Heiko Wundram (hwundram) Assigned to: Nobody/Anonymous (nobody) Summary: Simple slice support for list.sort() and .reverse() Initial Comment: As requested per http://groups.google.de/group/comp.lang.python/browse_thread/thread/6feadf8170900e53/aa621eed0fe14050?hl=de#aa621eed0fe14050 list.sort() should support extra keyword arguments start and stop, which specify a slice of the whole list to sort inplace. The attached patch implements this functionality, and extends the sorted() builtin to also offer these keyword arguments, and additionally implements slice support (also with start, stop) for list.reverse(). The patch updates the list object methods and the sorted builtin, and also updates the testsuite to check for the new keyword arguments and updates the documentation to list them. ---------------------------------------------------------------------- >Comment By: Collin Winter (collinwinter) Date: 2007-03-08 22:07 Message: Logged In: YES user_id=1344176 Originator: NO I think anyone who was relying on that behavior was treading on "implementation details" territory to begin with, so I wouldn't worry about this particular semantics nit. ---------------------------------------------------------------------- Comment By: Heiko Wundram (hwundram) Date: 2006-05-20 12:15 Message: Logged In: YES user_id=791932 By the way, I've just become aware of the fact that this patch changes the semantics of list.sort() somewhat, because of an optimization I did to the code. The DSU-function isn't called anymore when there are less than two items to sort, i.e. the list or the slice to sort is one item long. This means: --- def test(k): k.append(4) return k[0] x = [[1,2,3]] x.sort(key=test) print x --- will now print [[1,2,3]] (with the patch applied), whereas Python 2.4 would've printed [[1,2,3,4]], but not have called timsort either. I don't know whether this breaks anything (or the old behaviour was sensible); at least it should have to be documented. I'd like feedback before I start either taking out the optimization or documenting this. ---------------------------------------------------------------------- Comment By: Heiko Wundram (hwundram) Date: 2006-05-20 07:18 Message: Logged In: YES user_id=791932 The attached patch implements all of the old patch, and adds the specified logic for array.reverse(), updates the documentation for the array module and whatsnew25, and will speed up the methods a slight little bit in the absense of optimization when compiling Python. ---------------------------------------------------------------------- Comment By: Terry J. Reedy (tjreedy) Date: 2006-05-20 01:14 Message: Logged In: YES user_id=593130 Having thought about submitting an RFE for start/stop for reverse, I support the enhancement. Please do the same for array.reverse(, so list and array.reverse continue to have the same signature. Two uses: one way to swap partitions in place is reverse each partition and then the whole sequence; probably more useful is the slice reversal in one standard method for sequentially generating permutations in lexicographical order. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1491804&group_id=5470 _______________________________________________ Patches mailing list Patches@python.org http://mail.python.org/mailman/listinfo/patches