Я проверил ваш код и вижу проблему.В этом коде
for i in range(len(col_one)):
holder = number
for j in range(4):
holder.remove(col_one[i][j])
col_two.append(holder)
строка holder = number
не копирует number
, она просто дает number
второе имя, holder
.Затем, когда вы удаляете вещи из holder
, они также удаляются из number
, поэтому, когда цикл снова оборачивается, число содержит на четыре числа меньше.До бесконечности.
Вы хотите сделать копию числа:
for i in range(len(col_one)):
holder = list(number)
for j in range(4):
holder.remove(col_one[i][j])
col_two.append(holder)
Это создаст новый список из number
с именем holder
.Теперь только holder
изменено.
holder = number[:]
также будет работать.
Вы также должны использовать полный потенциал for
, избегая индексных переменных:
for num_list in col_one:
holder = list(number)
for num in num_list:
holder.remove(num)
col_two.append(holder)
Это делает то же самое, легче читать и, вероятно, быстрее загружаться.
Теперь перейдем к следующему шагу, перечислим понимание.Это отличный способ избежать вложенных циклов.
for c1_list in col_one:
c2_list = [n for n in number if n not in c1_list]
col_two.append(c2_list)
Это делает то же самое, что и выше.Вы даже можете сделать это однострочником:
col_two = [[n for n in number if n not in c1_list] for c1_list in col_one]
Объединяя все это вместе:
number = [53, 64, 68, 71, 77, 82, 85]
col_one = list(itertools.combinations(number, 4))
col_two = [[n for n in number if n not in c1_list] for c1_list in col_one]