Перестановка и комбинация Itertools с фиксированным размещением

#python #combinations #permutation #itertools

#питон #комбинации #перестановка #итерационные инструменты

Вопрос:

Я хочу переставить массив, где r=3. Все три позиции имеют некоторые фиксированные позиции. Правило положения идет:

 (arr[:3], arr[:3], arr[:7])
 

другое правило: один элемент встречается только один раз. (1,2,2) неприемлемо. Полученные три элемента должны быть уникальными.

текущее псевдо — это что-то вроде:

 result = []
for h1 in arr[:3]:
    for h2 in arr[:3]:
        if h1 == h2:
            continue
        for h3 in arr[:7]:
            if h1 == h3 or h2 == h3:
                continue
            result.append([h1,h2,h3])
 

Это означает, что, во-первых, могут быть только элементы в диапазоне от индекса 0 до 2. Вторая позиция также имеет то же самое, а третья позиция будет содержать элементы в диапазоне от 0 до 6.

Я хочу делать комбинации также по тому же правилу.

Я написал пользовательскую функцию, которая генерирует его идеально. Мне просто было интересно, есть ли какая-нибудь удобная функция itertools, которая выполняет эту работу. Есть ли они вообще?

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

1. Похоже, вы ищете декартово произведение.

Ответ №1:

Вы можете использовать itertools.product

 import itertools 
for ele in itertools.product(arr[:3], arr[:3], arr[:7]):
    print(ele)
 

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

1. Ваш ответ верен, но я сожалею, что некоторая информация была упущена. Я сожалею об этом. Я обновил вопрос. Пожалуйста, взгляните.