# Generate all subsets of a set

**URL:** <https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810>\
**Category:** General Usage\
**Tags:** first-steps, optimization\
**Created:** [August 2, 2018, 1:42am UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810 "2018-08-02T01:42:14Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![iin](https://avatars.discourse-cdn.com/v4/letter/i/a4c791/32.png) [@iin](https://discourse.julialang.org/u/iin)\
**Post date:** [August 2, 2018, 1:42am UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810/1 "2018-08-02T01:42:14Z")

</div>

Hi, I’m very new in Julia, & I really need help to generate all subsets of a set.  
For example: I have a set [1, 2, 3, 4, 5], then I need to generate all subsets from it, such [[1,2], [1,3], [2,3],…[2,3,4], …[2,3,4,5], etc]. Is there any suggestion about it?

---

<div class="post-metadata">

**Author:** ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)\
**Post date:** [August 2, 2018, 1:53am UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810/2 "2018-08-02T01:53:30Z")

</div>

> **[GitHub - JuliaMath/Combinatorics.jl: A combinatorics library for Julia](https://github.com/JuliaMath/Combinatorics.jl)**
>
> A combinatorics library for Julia. Contribute to JuliaMath/Combinatorics.jl development by creating an account on GitHub.

---

<div class="post-metadata">

**Author:** ![djsegal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/djsegal/32/13752_2.png) [@djsegal](https://discourse.julialang.org/u/djsegal)\
**Post date:** [August 2, 2018, 2:05am UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810/3 "2018-08-02T02:05:24Z")

</div>

Or if you’re bored:

```julia
cur_input_list = [1,2,3,4,5]

function foo(cur_input_list, cur_output_list=[], cur_set_lists=[])
  for (cur_index, cur_value) in enumerate(cur_input_list)
    tmp_input_list = cur_input_list[cur_index+1:end]
    tmp_output_list = deepcopy(cur_output_list)
    push!(tmp_output_list, cur_value)

    push!(cur_set_lists, tmp_output_list)
    foo(tmp_input_list, tmp_output_list, cur_set_lists)
  end

  cur_set_lists
end

foo(cur_input_list)

```

---

<div class="post-metadata">

**Author:** ![anon94023334](https://avatars.discourse-cdn.com/v4/letter/a/e274bd/32.png) [@anon94023334](https://discourse.julialang.org/u/anon94023334)\
**Post date:** [August 2, 2018, 3:24pm UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810/4 "2018-08-02T15:24:37Z")

</div>

Specifically, [https://github.com/JuliaMath/Combinatorics.jl/blob/60a2343af0dfc54ab01af6bb2f21d0b5a51fb729/src/combinations.jl#L268-L280](https://github.com/JuliaMath/Combinatorics.jl/blob/60a2343af0dfc54ab01af6bb2f21d0b5a51fb729/src/combinations.jl#L268-L280)

---

<div class="post-metadata">

**Author:** ![jlapeyre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jlapeyre/32/4514_2.png) [@jlapeyre](https://discourse.julialang.org/u/jlapeyre)\
**Post date:** [August 2, 2018, 9:26pm UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810/5 "2018-08-02T21:26:17Z")

</div>

This is called the “powerset”. Google _Julia powerset_ and you’ll get several results in addition to `Combinatorics.jl`.

Here is the Julia entry from [rosettacode.org](http://rosettacode.org):

```julia
function powerset(x::Vector{T}) where T
    result = Vector{T}[[]]
    for elem in x, j in eachindex(result)
        push!(result, [result[j] ; elem])
    end
    result
end

```

---

<div class="post-metadata">

**Author:** ![iin](https://avatars.discourse-cdn.com/v4/letter/i/a4c791/32.png) [@iin](https://discourse.julialang.org/u/iin)\
**Post date:** [August 15, 2018, 3:22am UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810/6 "2018-08-15T03:22:58Z")

</div>

Thank you so much for all of your kindly helps! Really help me as a new beginner.

---

<div class="post-metadata">

**Author:** ![Vahidmhn](https://avatars.discourse-cdn.com/v4/letter/v/858c86/32.png) [@Vahidmhn](https://discourse.julialang.org/u/Vahidmhn)\
**Post date:** [January 9, 2019, 8:32pm UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810/7 "2019-01-09T20:32:24Z")

</div>

Thanks for your help!

But I still have a problem with function _powerset_. Here is what I get for powerset([1,2,3,4],2):

IterTools.Chain{Tuple{Combinatorics.Combinations{Array{Int64,1}},Combinatorics.Combinations{Array{Int64,1}},Combinatorics.Combinations{Array{Int64,1}}}}((Combinatorics.Combinations{Array{Int64,1}}([1, 2, 3, 4], 2), Combinatorics.Combinations{Array{Int64,1}}([1, 2, 3, 4], 3), Combinatorics.Combinations{Array{Int64,1}}([1, 2, 3, 4], 4)))

How is the user supposed to obtain the subsets out of this?

---

<div class="post-metadata">

**Author:** ![JeffreySarnoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jeffreysarnoff/32/1980_2.png) [@JeffreySarnoff](https://discourse.julialang.org/u/JeffreySarnoff)\
**Post date:** [January 9, 2019, 8:46pm UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810/8 "2019-01-09T20:46:34Z")

</div>

```julia
julia> using Combinatorics
julia> collect(powerset([:a, :b, :c]))
8-element Array{Array{Symbol,1},1}:
 []
 [:a]
 [:b]
 [:c]
 [:a, :b]
 [:a, :c]
 [:b, :c]
 [:a, :b, :c]

```

---

<div class="post-metadata">

**Author:** ![Sukera](https://avatars.discourse-cdn.com/v4/letter/s/ce7236/32.png) [@Sukera](https://discourse.julialang.org/u/Sukera)\
**Post date:** [January 9, 2019, 8:49pm UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810/9 "2019-01-09T20:49:05Z")

</div>

Note that in most cases where you’re subsequently iterating over that set of subsets you don’t need to `collect` but rather you can use the result of `powerset` directly.

---

<div class="post-metadata">

**Author:** ![Vahidmhn](https://avatars.discourse-cdn.com/v4/letter/v/858c86/32.png) [@Vahidmhn](https://discourse.julialang.org/u/Vahidmhn)\
**Post date:** [January 9, 2019, 10:39pm UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810/10 "2019-01-09T22:39:32Z")

</div>

Great! This was the fastest response ever. Thanks!

---

<div class="post-metadata">

**Author:** ![maxiumburn](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/maxiumburn/32/10673_2.png) [@maxiumburn](https://discourse.julialang.org/u/maxiumburn)\
**Post date:** [October 12, 2019, 4:37pm UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810/11 "2019-10-12T16:37:36Z")

</div>

How to use IterTools ? does this still work in Julia? I was using JuliaBox and I added Pkg.(“IterTool”)  
But could not use subsets the error was subset not defined?

---

<div class="post-metadata">

**Author:** ![laborg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/laborg/32/5474_2.png) [@laborg](https://discourse.julialang.org/u/laborg)\
**Post date:** [October 12, 2019, 4:54pm UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810/12 "2019-10-12T16:54:37Z")

</div>

What exactly didn’t work?  
Btw. The function `powerset` comes from the package “Combinatorics.jl” and still works on Julia 1.2.

---

<div class="post-metadata">

**Author:** ![maxiumburn](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/maxiumburn/32/10673_2.png) [@maxiumburn](https://discourse.julialang.org/u/maxiumburn)\
**Post date:** [October 12, 2019, 5:30pm UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810/13 "2019-10-12T17:30:48Z")

</div>

I went to [Introduction · IterTools](https://juliacollections.github.io/IterTools.jl/latest/) and copied `Pkg.add("IterTools")`  
and copied  
for i in subsets([1, 2, 3])  
@show i  
end  
and an error code stated could not find subsets

---

<div class="post-metadata">

**Author:** ![jlapeyre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jlapeyre/32/4514_2.png) [@jlapeyre](https://discourse.julialang.org/u/jlapeyre)\
**Post date:** [October 13, 2019, 1:23am UTC](https://discourse.julialang.org/t/generate-all-subsets-of-a-set/12810/14 "2019-10-13T01:23:18Z")

</div>

Did you also `using` IterTools ?

```julia
(v1.4) pkg> add IterTools
  Updating registry at `~/.julia/registries/General`
  Updating git-repo `https://github.com/JuliaRegistries/General.git`
 Resolving package versions...
 Installed Compat ────── v2.2.0
 Installed Polynomials ─ v0.5.3
  Updating `~/.julia/environments/v1.4/Project.toml`
  [c8e1da08] + IterTools v1.2.0
  Updating `~/.julia/environments/v1.4/Manifest.toml`
  [34da2185] ↑ Compat v2.1.0 ⇒ v2.2.0
  [c8e1da08] + IterTools v1.2.0
  [f27b6e38] ↑ Polynomials v0.5.2 ⇒ v0.5.3

julia> using IterTools
[Info: Precompiling IterTools [c8e1da08-722c-5040-9ed9-7db0dc04731e]

julia> collect(subsets([1,2,3]))
8-element Array{Array{Int64,1},1}:
 []
 [1]
 [2]
 [1, 2]
 [3]
 [1, 3]
 [2, 3]
 [1, 2, 3]

```
