как мне сделать круговой перебор в python 3

я должен сделать вращение списка. Я получаю отсортированный список, и мне нужно получить минимум пар и максимум чисел дерева в перестановке этого отсортированного списка в качестве ответа. Он должен иметь разные числа, отсортированные от меньшего к большему. Например:

MyList=[1, 1, 1, 2, 2, 2, 3, 3, 3, 3]

и вывод должен быть:

1 2 3
1 2 3
1 3
2 3

и для :

MyList=[1, 1, 1, 1, 1, 2, 3, 4, 5, 6]

и вывод должен быть:

1 2
1 3
1 4
1 5
1 6

Я видел, что могу сделать это с помощью метода, называемого циклическим, но я не знаю, как это сделать. Спасибо за помощь!


person ginger    schedule 02.09.2017    source источник
comment
Вы можете кодировать только 1 список для каждой программы. В зависимости от желаемой длины вывода вы должны создать новую программу для каждой длины.   -  person Pokestar Fan    schedule 03.09.2017
comment
я не могу делать программы для каждой длины   -  person ginger    schedule 03.09.2017
comment
цифры дерева или 3 цифры?   -  person John Zwinck    schedule 03.09.2017
comment
3 номера, извините за мой английский   -  person ginger    schedule 03.09.2017
comment
Почему во втором случае так часто возвращается к 1? По обычным правилам кругового перебора он должен выдать 1 2 3 4 5 6, затем еще четыре раза 1... То же самое касается 3 в паре только с 1, а затем только 2 в первом. Есть какое-то странное правило, которое вы здесь не объясняете.   -  person ShadowRanger    schedule 29.05.2019


Ответы (1)


from itertools import cycle

A = [[1,2,3],[4,5,6],[7]]
B = [[8],[9,10,11],[12,13]]

for p in A:
   max1 = len(p) if  max1 <len(p) else max1

for p in B:
   max1 = len(p) if  max1 <len(p) else max1

i = len(A)
j = 0
C = []
list_num = cycle(k for k in range(i))

for x in list_num:
   j += 1
   if j == i*3:
       break
   if A[x]:
       C.append(A[x].pop(0))
   if B[x]:
       C.append(B[x].pop(0))

Выход:

[1, 8, 4, 9, 7, 12, 2, 5, 10, 13, 3, 6, 11]
person Ankush Ukirde    schedule 29.05.2019