Перечисление всех возможных комбинаций имен без повторения групп

fromthemoon

Новичок
Пользователь
Июн 4, 2020
3
0
1
Добрый вечер!
OS Windows 10
Python version 3.8.2
Необходимо перечислить все возможные комбинации по 3 имени в группе, без повторов, т.е. если вывелось ["Finn", "Kelly", "Anna"], то второй раз эта группа не может появиться. Как я понял таких комбинаций должно быть 27, но сейчас код выводит только 9. Помогите плз и не кидайте сильно тапком.

Python:
import random

name = ["Alex", "Finn", "Kelly", "Mike", "Tom", "Steven", "Anna", "Frank", "John"]

quantity = 3

for i in name:
    samples = random.sample(name, quantity)
    print(samples)
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот пример, который выведет все возможные комбинации:
Python:
from itertools import permutations

name = permutations(["Alex", "Finn", "Kelly", "Mike", "Tom", "Steven", "Anna", "Frank", "John"], 3)

for i in list(name):
    print(i)
 

fromthemoon

Новичок
Пользователь
Июн 4, 2020
3
0
1
Вот пример, который выведет все возможные комбинации
Спасибо, крутое решение, пока искал как сделать, наткнулся на эту стандартную библиотеку, которая помогает обходиться без использования списков, но есть одна проблема, а если таких имен 100? Python начинает писать MemoryError, я так понимаю слишком большой объем данных вбивается и не выходит этот объем обработать
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Спасибо, крутое решение, пока искал как сделать, наткнулся на эту стандартную библиотеку, которая помогает обходиться без использования списков, но есть одна проблема, а если таких имен 100? Python начинает писать MemoryError, я так понимаю слишком большой объем данных вбивается и не выходит этот объем обработать
MemoryError - значит памяти не хватает для выполнения скрипта. Это происходит из-за использования списка.
Можно для большого количества имен попробовать делать без списка.
Вот пример:
Python:
name = permutations(["Alex", "Finn", "Kelly", "Mike", "Tom", "Steven", "Anna", "Frank",
                     "John", "Alex", "Finn", "Kelly", "Mike", "Tom", "Steven", "Anna",
                     "Frank", "John", "Alex", "Finn", "Kelly", "Mike", "Tom", "Steven",
                     "Anna", "Frank", "John", "Alex", "Finn", "Kelly", "Mike", "Tom",
                     "Steven", "Anna", "Frank", "John", "Alex", "Finn", "Kelly", "Mike",
                     "Tom", "Steven", "Anna", "Frank", "John", "Alex", "Finn", "Kelly",
                     "Mike", "Tom", "Steven", "Anna", "Frank", "John", "Alex", "Finn",
                     "Kelly", "Mike", "Tom", "Steven", "Anna", "Frank", "John", "Alex",
                     "Finn", "Kelly", "Mike", "Tom", "Steven", "Anna", "Frank", "John"], 3)

while True:
    try:
        print(next(name))
    except StopIteration:
        break
 
  • Мне нравится
Реакции: MacSeem и fromthemoon

fromthemoon

Новичок
Пользователь
Июн 4, 2020
3
0
1
Огромное спасибо, супер всё работает?
 

Форум IT Специалистов