Генерация всех возможных уникальных образцов с n-элементами из - PullRequest
1 голос
/ 12 апреля 2020

Существует ли какой-либо простой способ генерирования всех возможных уникальных сэмплов из любого данного фрейма сэмпла, например У меня есть список из 5 элементов member = ['P', 'V', 'S', 'T', 'A'], и я хотел бы нарисовать все возможные комбинации из 2 элементов, независимо от порядка, т.е. эквивалентно «VP». Поэтому из списка ['P', 'V', 'S', 'T', 'A'] я должен получить 10, 2 выборки элементов.

Я создал что-то, что делает трюк, но я Задаться вопросом, существует ли уже какой-либо метод или функция, которая делает это и позволит просто предоставить кадр выборки, размер выборки и создать все возможные комбинации.

members = list('PVSTA')
ms = []

   for i in members:
       for j in members:
           if i != j and i+j not in ms and j+i not in ms:
               ms.append(i+j)
           else:
               continue
print(ms)
['PV', 'PS', 'PT', 'PA', 'VS', 'VT', 'VA', 'ST', 'SA', 'TA']

Ответы [ 3 ]

1 голос
/ 12 апреля 2020

Вы можете использовать itertools.combinations(iterable, r), которые возвращают подпоследовательности элементов r длины из итеративного ввода. Так что в вашем случае, когда итерация равна ['P', 'V', 'S', 'T', 'A'] и r=2, она вернет 5 C 2 = 10 комбинаций.

Использование:

from itertools import combinations

ms = ["".join(c) for c in combinations(list("PVSTA"), r=2)]
print(ms)

Вывод:

['PV', 'PS', 'PT', 'PA', 'VS', 'VT', 'VA', 'ST', 'SA', 'TA']
0 голосов
/ 12 апреля 2020

Другие уже опубликовали маршрут itertools.combission (лучший подход), но вот ручной способ сделать это для всех, кто заинтересован:

members = list('PVSTA')
ms = []
for i in range(len(members)-1):
  for j in range(i+1, len(members)):
    ms.append(members[i] + members[j]
print(ms) # ['PV', 'PS', 'PT', 'PA', 'VS', 'VT', 'VA', 'ST', 'SA', 'TA']

0 голосов
/ 12 апреля 2020

То, что вы хотите сделать, называется комбинациями, вы можете сделать это с помощью библиотеки itertools в python.

from itertools import combinations

members = list('PVSTA') 
comb_2 = combinations(members, 2) 
result = ["".join(c) for c in comb_2] 
print(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...