У мене була подібна проблема і я знайшов рішення тут . Це працює без необхідності імпортувати будь-який модуль.
Припустимо такий список, як:
people = ["Lisa","Pam","Phil","John"]
Спрощене однорядкове рішення могло б виглядати так.
Усі можливі пари , включаючи дублікати:
result = [foo(p1, p2) for p1 in people for p2 in people]
Усі можливі пари, крім дублікатів :
result = [foo(p1, p2) for p1 in people for p2 in people if p1 != p2]
Унікальні пари , де порядок не має значення:
result = [foo(people[p1], people[p2]) for p1 in range(len(people)) for p2 in range(p1+1,len(people))]
Якщо ви не хочете працювати, а просто отримати пари, видаливши функцію foo буде достатньо та використання лише кортежу.
Усі можливі пари , включаючи дублікати:
list_of_pairs = [(p1, p2) for p1 in people for p2 in people]
Результат:
('Lisa', 'Lisa')
('Lisa', 'Pam')
('Lisa', 'Phil')
('Lisa', 'John')
('Pam', 'Lisa')
('Pam', 'Pam')
('Pam', 'Phil')
('Pam', 'John')
('Phil', 'Lisa')
('Phil', 'Pam')
('Phil', 'Phil')
('Phil', 'John')
('John', 'Lisa')
('John', 'Pam')
('John', 'Phil')
('John', 'John')
Усі можливі пари, крім дублікатів :
list_of_pairs = [(p1, p2) for p1 in people for p2 in people if p1 != p2]
Результат:
('Lisa', 'Pam')
('Lisa', 'Phil')
('Lisa', 'John')
('Pam', 'Lisa')
('Pam', 'Phil')
('Pam', 'John')
('Phil', 'Lisa')
('Phil', 'Pam')
('Phil', 'John')
('John', 'Lisa')
('John', 'Pam')
('John', 'Phil')
Унікальні пари , де порядок не має значення:
list_of_pairs = [(people[p1], people[p2]) for p1 in range(len(people)) for p2 in range(p1+1,len(people))]
Результат:
('Lisa', 'Pam')
('Lisa', 'Phil')
('Lisa', 'John')
('Pam', 'Phil')
('Pam', 'John')
('Phil', 'John')
Редагувати: Після переробки для спрощення цього рішення я зрозумів, що це такий самий підхід, як Адам Розенфілд. Я сподіваюся, що розширене пояснення допомагає деяким зрозуміти це краще.