What Is Pythononic Way Of Slicing A Set?
Solution 1:
Sets are iterable. If you really don't care which items from your set are selected, you can use itertools.islice
to get an iterator that will yield a specified number of items (whichever ones come first in the iteration order). Pass the iterator to the set
constructor and you've got your subset without using any extra lists:
import itertools
some_data = [1, 2, 4, 1, 6, 23, 3, 56, 6, 2, 3, 5, 6, 32, 2, 12, 5, 3, 2]
big_set = set(some_data)
small_set = set(itertools.islice(big_set, 5))
While this is what you've asked for, I'm not sure you should really use it. Sets may iterate in a very deterministic order, so if your data often contains many similar values, you may end up selecting a very similar subset every time you do this. This is especially bad when the data consists of integers (as in the example), which hash to themselves. Consecutive integers will very frequently appear in order when iterating a set. With the code above, only 32
is out of order in big_set
(using Python 3.5), so small_set
is {32, 1, 2, 3, 4}
. If you added 0
to the your data, you'd almost always end up with {0, 1, 2, 3, 4}
even if the dataset grew huge, since those values will always fill up the first fives slots in the set's hash table.
To avoid such deterministic sampling, you can use random.sample
as suggested by jprockbelly.
Solution 2:
You could sample the set
import random
set(random.sample(my_set, 5))
The advantage of this you'll get different numbers each time
Solution 3:
You could try a simple set comprehension:
some_data = [1, 2, 4, 1, 6, 23, 3, 56, 6, 2, 3, 5, 6, 32, 2, 12, 5, 3, 2]
n = {x for i, x inenumerate(set(some_data)) if i < 5}
print n
Output:
set([32, 1, 2, 3, 4])
Solution 4:
I went through all the examples above and all of the answers are indeed great. I have one more approach to share in order to slice sets i.e. the use of the * operator. This approach requires us to use variables in order to store the memory address/references of elements. The final output we get after slicing is a list so if we want the final output to be a set we need to typecast the final result into a list or any other datatype we want to. The image of the code cannot be embedded since I do not have 10 points and therefore a link to the image of the code is given. Kindly do have a look and feel free to provide any suggestions regarding the same. Thanks.
The sample code image
Post a Comment for "What Is Pythononic Way Of Slicing A Set?"