разделите массив на два массива всех возможных форм, включая порядок повторений от первого набора ко второму, но не повторяйте элементы

#python #arrays #split

Вопрос:

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

Допустим, у меня есть массив, как показано ниже:

 array = [1,2,3]
 

Я хотел бы найти все способы разделить элементы этого массива на два новых массива, независимо от того, равны они по размеру или различны, то есть:

 [1] -- [2,3]
[2] -- [1.3]
[3] -- [1,2]
[2,3] -- [1]
[1,3] -- [2]
[1,2] -- [3]
 

Я пытаюсь сделать это на Python и, как я уже сказал, не нашел способа сделать это, хотя знаю itertools и powerset .
На самом деле я хотел бы распечатать выходные данные в файле, содержащем каждую пару массивов рядом.

Ответ №1:

Вы могли бы написать функцию:

 from copy import deepcopy
from itertools import combinations

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

for i in range(1, len(array)   1):
    lst = deepcopy(array)
    nlst1 = list(combinations(lst, i))
    nlst1 = [list(i) for i in nlst1]
    nlst2 = []
    for j in nlst1:
        lst = deepcopy(array)
        for k in j:
            lst.remove(k)
        nlst2.append(lst)

    for i in range(len(nlst1)):
        print(nlst1[i], nlst2[i])
 

Комментарии:

1. Любопытно, как вы используете это, чтобы получить «все возможные формы», особенно учитывая, что вы уничтожили список входных данных?

2. @CoderTang Я вижу, что, запрашивая показ в конце файла, как вы, я могу получить шесть способов, но это было бы не очень практично, если мой исходный массив содержит тысячи элементов, даже если я пытаюсь адаптировать ваш код.

3. @CoderTang, теперь я понимаю IndexError: pop index out of range .

4. @7beggars_nnnnm Я немного обновил его. не уверен, что это поможет

5. @7beggars_nnnnm забыл добавить немного кода