[issue7212] Retrieve an arbitrary element from a set without removing it
Changes by Raymond Hettinger rhettin...@users.sourceforge.net: -- status: open - closed ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7212 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7212] Retrieve an arbitrary element from a set without removing it
ipatrol ipatrol6...@yahoo.com added the comment: I still see a use in this. I like to use sets for lists of servers or mirrors. There is no compelling reason *not* to add a get() or pick() method, as described in http://en.wikipedia.org/wiki/Set_%28computer_science%29. Sets could be used for many things that lists are currently used for. I request for this to be reopened given the lapse since any action on this. -- components: +Interpreter Core -Library (Lib) nosy: +ipatrol ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7212 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7212] Retrieve an arbitrary element from a set without removing it
ipatrol ipatrol6...@yahoo.com added the comment: I support http://bugs.python.org/msg94599 with a check to see if the length is 0, and rename it pick (based on the generic programming and mathematical literature). -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7212 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7212] Retrieve an arbitrary element from a set without removing it
Raymond Hettinger rhettin...@users.sourceforge.net added the comment: Use set.pop(). Or if you don't want mutation, then use next(iter(s)) or next(iter(s),default). This technique also works for any collection including dicts and deques and whatnot. -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7212 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7212] Retrieve an arbitrary element from a set without removing it
Alexander Belopolsky belopol...@users.sourceforge.net added the comment: I don't want to pollute python-dev with more hopeless ideas, but I wonder if itertools could grow an efficient C-implemented def first(collection): return next(iter(collection)) On the other hand, it probably belongs to recipes more than stdlib. This is not really an iterator tool after all. -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7212 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7212] Retrieve an arbitrary element from a set without removing it
Raymond Hettinger rhettin...@users.sourceforge.net added the comment: After a long discussion on python-dev, this proposal is rejected in favor of adding documentation notes on the ways to non-destructively retrieve an arbitrary item from a set or frozenset. Here is an except from the end of the thread: [Steven D'Aprano] Anyway, given the level of opposition to the suggestion, I'm no longer willing to carry the flag for it. If anyone else -- perhaps the OP -- feels they want to take it any further, be my guest. [geremy condra] I've said before that I'd like there to be one, standard way of doing this. A function call- set.pick() seems reasonably named to me- is probably the cleanest way to do that. Absent that, an example in the docs that illustrates the preferred idiom would be great. [Raymond] Summarizing my opposition to a new set method: 1) there already are at least two succinct ways to get the same effect 2) those ways work with any container, not just sets 3) set implementations in other languages show that this isn't needed. 4) there is value to keeping the API compact 5) isn't needed for optimization (selecting the same value in a loop makes no sense) 6) absence of real-world code examples that would be meaningfully improved [Terry Reedy] Agreed [Raymond] I would be happy to add an example to the docs so that this thread can finally end. [Eric Smith] Please do! [Terry Reedy] Yes! ''' Leaving this open until I've done the documentation patch. -- priority: - low resolution: - rejected ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7212 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7212] Retrieve an arbitrary element from a set without removing it
Willi Richert w.rich...@gmx.net added the comment: No particular reason, besides that it is ripped off of pop(). Your solution (omitting register) gives the same performance. Looks cleaner, of course. The patch tries to provide a clean way of for x in some_set: break, as explained above. See the recent python-dev mailing list musings. -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7212 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7212] Retrieve an arbitrary element from a set without removing it
Changes by Willi Richert w.rich...@gmx.net: Removed file: http://bugs.python.org/file15207/setobject_get.patch ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7212 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7212] Retrieve an arbitrary element from a set without removing it
Changes by Willi Richert w.rich...@gmx.net: Added file: http://bugs.python.org/file15211/setobject_get.patch ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7212 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7212] Retrieve an arbitrary element from a set without removing it
Willi Richert w.rich...@gmx.net added the comment: added tests for get() to test_set.py -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7212 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7212] Retrieve an arbitrary element from a set without removing it
Alexander Belopolsky belopol...@users.sourceforge.net added the comment: Any reason you don't want to call set_next from set_get? I would say static PyObject * set_get(PySetObject *so) { register Py_ssize_t pos = 0; register setentry *entry; if (set_next(so, pos, entry)) { Py_INCREF(entry-key); return entry-key; } /* set appropriate error */ return NULL; } BTW, what your patch is supposed to do on set().get()? } -- nosy: +belopolsky ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7212 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7212] Retrieve an arbitrary element from a set without removing it
New submission from Willi Richert w.rich...@gmx.net: Sometimes, a non-removing pop() is needed. In current Python versions, it can achieved by one of the following ways: 1. x = some_set.pop() some_set.add(x) 2. for x in some_set: break 3. x = iter(some_set).next() More native and clean would, however, be some_set.get() The attached patch does this for set(). If this is accepted by the community, frozenset should be extended as well. -- components: Library (Lib) files: setobject_get.patch keywords: patch messages: 94508 nosy: wrichert severity: normal status: open title: Retrieve an arbitrary element from a set without removing it type: feature request versions: Python 3.1, Python 3.2 Added file: http://bugs.python.org/file15207/setobject_get.patch ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7212 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7212] Retrieve an arbitrary element from a set without removing it
Changes by Raymond Hettinger rhettin...@users.sourceforge.net: -- assignee: - rhettinger nosy: +rhettinger versions: +Python 2.7 -Python 3.1 ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7212 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue7212] Retrieve an arbitrary element from a set without removing it
Benjamin Peterson benja...@python.org added the comment: Without tests, this patch is unacceptable. -- nosy: +benjamin.peterson ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue7212 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com