Я пытаюсь решить задачу собеседования по программированию, когда мне нужно сгенерировать подмножества массива. Скажем, массив [1,2,3]. Когда я использую:
def subsets(arr):
def explore(arr, ans, temp, start, size):
ans.append(temp[:])
for i in range(start, size):
#choose
temp.append(arr[i])
#explore
explore(arr, ans, temp, start + 1, size)
#undo
temp.pop()
ans = []
size = len(arr)
explore(arr, ans, [], 0, size)
return ans
Я получаю: [[], [1], [1, 2], [1, 2, 3], [1, 3], [1, 3, 3], [2], [2, 2], [ 2, 2, 3], [2, 3], [2, 3, 3], [3], [3, 2], [3, 2, 3], [3, 3], [3, 3, 3]]
Однако, когда я использую i вместо start, вот так:
def subsets(arr):
def explore(arr, ans, temp, start, size):
ans.append(temp[:])
for i in range(start, size):
#choose
temp.append(arr[i])
#explore
explore(arr, ans, temp, i + 1, size)
#undo
temp.pop()
ans = []
size = len(arr)
explore(arr, ans, [], 0, size)
return ans
Я получаю правильный ответ: [[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]] ".
Что здесь происходит? Я думал, что в результате разницы не будет, так как это всего лишь разница в именах переменных.






Вероятно, было бы намного проще использовать itertools ... если это не разрешено.
import itertools
stuff = [1, 2, 3]
for L in range(0, len(stuff)+1):
for subset in itertools.combinations(stuff, L):
print(subset)
Что касается вашего вопроса. i - это значение, увеличивающееся на каждой итерации вашего цикла, start - это значение i на первой итерации. Следовательно, они не взаимозаменяемы.
это не просто различие в именах переменных, а именно. i и start имеют разные значения. i выполняет итерацию по списку целых чисел, который начинается с start и заканчивается size-1 в цикле, тогда как start является постоянным для всех этих циклов. Надеюсь, поможет.