2016-12-14 2 views
0

Я допустил ошибку в использовании перестановок вместо комбинаций, я должен печатать имена, которые пользователь вводит в эти программы парами из двух, а не все перестановки имен вместе здесь является фрагментом моего кода, полный код может быть найден HERE Итак, общий вопрос заключается в том, чтобы не печатать каждую возможную комбинацию имен, как я могу напечатать не повторяющиеся пары из 2?изменение перестановки в комбинации (PYTHON)

names = [] 

for i in range(n): names.append(raw_input("Enter name " + str(i + 1) + ": ")) 

count = 0 


def perm(a, k=0): 
global count 
if (k == len(a)): 
    print a 

    count += 1 
else: 
    for i in xrange(k, len(a)): 
     a[k], a[i] = a[i], a[k] 
     perm(a, k + 1) 
     a[k], a[i] = a[i], a[k] 


if n % 2 == 0: 
print"" 
perm(names) 
print"total combinations available: " + str(count) 
else: 

perm(names) 
print"total combinations available: " + str(count) 
print("please enter an even number next time") 

sys.exit() 
+2

Используйте 'itertools.combinations()' и 'set()'. –

+0

@leaf, как именно я буду заниматься этим? удалить все между «для i» до оператора «for» и заменить его? извините im действительно noobie –

ответ

1

Вы можете использовать itertools.combinations() создать все возможные комбинации, а затем использовать set(), чтобы отфильтровать все уникальные комбинации:

import itertools 
... 
combinations = set(itertools.combinations(names, 2)) 

Однако в вашем коде, кажется, вы заботитесь только о числа возможных комбинаций. Вы можете использовать встроенную функцию len(), чтобы найти это:

number_of_combinations = len(combinations) 

Где бы вы использовали count заменить его number_of_combinations.

+0

работает отлично большое спасибо –

+0

Мое удовольствие, @ethanjjjjjj. –

Смежные вопросы