On 26/06/2018 12:39, Chris Angelico wrote:
On Tue, Jun 26, 2018 at 9:30 PM, Bart <b...@freeuk.com> wrote:
On 19/06/2018 11:33, Steven D'Aprano wrote:

On Tue, 19 Jun 2018 10:19:15 +0100, Bart wrote:


* Integer sets (Pascal-like sets)

Why do you need them if you have real sets?


I tried Python sets for the first time. They seemed workable but rather
clunky to set up. But here is one problem on my CPython:

    x = set(range(10_000_000))

This used up 460MB of RAM (the original 100M I tried exhausted the memory).

The advantage of Pascal-style sets is that that same set will occupy only
1.25MB, as it is a bit-map.

While sets will not usually be that big, there might be lots of small sets
and they all add up.

Cool. Make me a bitset that can represent this Python set:

{-5, -4, 6, 10, 1.5, "spam", print}

Why? It's a set of integer values with a huge range of applications.

Here's the set of characters allowed in a C identifier (not using Python syntax):

  cident = {'A'..'Z', 'a'..'z', '0'..'9', '_', '9'}

The characters allowed in a hex constant:

  {'0'..'9', 'A'..'F', 'a'..'f'}

A set representing every Unicode character, except those which can be C identifiers:

  {0..1_114_111} - cident

The latter taking only 136KB rather than 64MB as it seemed to.

I don't know whether there is a direct equivalent in Python (I thought somebody would point it out), apart from ways to construct similar functionality with bit-arrays (but then, every language can have such sets if you take the DIY approach).

Steven asked why I need them when there are 'real' sets, and I answered that.


--
bart
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to