Я только начал работать с Python, и я натолкнулся на поведение, которое я не понимаю. Я искал объяснение на сайте, но не смог его найти. Возможно, я не знаю правильных ключевых слов для поиска.
Я (кажется, я) пытаюсь рекурсивно определить список, но вместо того, чтобы неоднократно добавлять новый элемент в список, все элементы в списке заменяются этим новым элементом. Смотрите фрагмент ниже. Код должен генерировать список I
, содержащий все (упорядоченные) подсписки [0,...,n]
длины d
.
n = 5
d = 2
def next(S):
m = S.index(min([s for s in S if s+1 not in S]))
for i in range(m):
S[i] = i
S[m] += 1
return S
I = [[i for i in range(d)]]
while I[-1][0] <= n-d:
I += [next(I[-1])]
print(I)
Я ожидал, что это вернет следующий список:
[[0,1],[0,2],[1,2],[0,3],[1,3],[2,3],[0,4],[1,4],[2,4],[3,4],[0,5],[1,5],[2,5],[3,5],[4,5]]
Но вместо этого он возвращает следующий список:
[[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5]]
Может кто-нибудь указать мне объяснение, почему этот код не выполняет то, что я ожидаю? Заранее спасибо.