2015-10-16 2 views
3

В следующем коде, я пытаюсь напечатать каждое имя с другим именем один раз:Печать из списка в Python

myList = ['John', 'Adam', 'Nicole', 'Tom'] 
for i in range(len(myList)-1): 
    for j in range(len(myList)-1): 
     if (myList[i] <> myList[j+1]): 
      print myList[i] + ' and ' + myList[j+1] + ' are now friends' 

В результате я получил это:

John and Adam are now friends 
John and Nicole are now friends 
John and Tom are now friends 
Adam and Nicole are now friends 
Adam and Tom are now friends 
Nicole and Adam are now friends 
Nicole and Tom are now friends 

Как вы можете видеть , он отлично работает, и каждое имя является другом с другим именем, но есть повторение, которое равно Nicole and Adam, которое уже упоминалось как Adam and Nicole. Я хочу, чтобы я мог заставить код не печатать такое повторение.

+0

Вы можете следить за то, что уже было сказано. –

+1

Для дальнейшего использования вы хотите изменить оператор '<>' на '! ='. – Nayuki

+3

Вы можете выполнить внутреннюю итерацию из элемента один после внешней итерации, например: 'for j в диапазоне (i + 1, len (myList))' –

ответ

15

Это хорошая возможность использовать itertools.combinations:

In [9]: from itertools import combinations 

In [10]: myList = ['John', 'Adam', 'Nicole', 'Tom'] 

In [11]: for n1, n2 in combinations(myList, 2): 
    ....:  print "{} and {} are now friends".format(n1, n2) 
    ....: 
John and Adam are now friends 
John and Nicole are now friends 
John and Tom are now friends 
Adam and Nicole are now friends 
Adam and Tom are now friends 
Nicole and Tom are now friends 
+0

Ничего себе, это интересный инструмент, о котором я не знал. – JsingH

+0

11 upvotes за 9 минут WoW! – The6thSense

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