![]() | 1 | initial version |
The reason why your program doesn't work is due to the line
Q = A
in rakovetkezo
. When you do Q = A
, you make Q
point to the same object that A
is pointing to. Then, when you change Q
, you also change A
. See the following:
sage: A = [1,2,3]
sage: Q = A
sage: id(Q)
88220880
sage: id(A)
88220880
sage: Q[0] = 100
sage: A
[100, 2, 3]
In order to make a copy of A, you can do something like
Q = A[:]
or
Q = list(A)
or
from copy import copy
Q = copy(A)
Then your program will work just fine.
Sage also has a builtin class for working with with combinations which is a bit more fully-featured than itertools.combinations
. Here are some examples of this.
sage: S = Combinations(range(5), 3); S
Combinations of [0, 1, 2, 3, 4] of length 3
sage: S.cardinality()
10
sage: S.random_element()
[0, 3, 4]
sage: S.list()
[[0, 1, 2], [0, 1, 3], [0, 1, 4], [0, 2, 3], [0, 2, 4], [0, 3, 4], [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]
sage: [x for x in S]
[[0, 1, 2], [0, 1, 3], [0, 1, 4], [0, 2, 3], [0, 2, 4], [0, 3, 4], [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]