Benzer bir sorun yaşadım ve çözümü burada buldum . Herhangi bir modülü içe aktarmak zorunda kalmadan çalışır.
Şöyle bir liste varsayarsak:
people = ["Lisa","Pam","Phil","John"]
Basitleştirilmiş tek satırlık bir çözüm şuna benzer.
Yinelenenler dahil tüm olası çiftler :
result = [foo(p1, p2) for p1 in people for p2 in people]
Yinelenenler hariç tüm olası çiftler :
result = [foo(p1, p2) for p1 in people for p2 in people if p1 != p2]
Siparişin alakasız olduğu benzersiz çiftler :
result = [foo(people[p1], people[p2]) for p1 in range(len(people)) for p2 in range(p1+1,len(people))]
Çalıştırmak istemiyorsanız, sadece çiftleri elde etmek istiyorsanız, işlevi kaldırmak foove sadece bir tuple kullanmak yeterli olacaktır.
Yinelenenler dahil tüm olası çiftler :
list_of_pairs = [(p1, p2) for p1 in people for p2 in people]
Sonuç:
('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')
Yinelenenler hariç tüm olası çiftler :
list_of_pairs = [(p1, p2) for p1 in people for p2 in people if p1 != p2]
Sonuç:
('Lisa', 'Pam')
('Lisa', 'Phil')
('Lisa', 'John')
('Pam', 'Lisa')
('Pam', 'Phil')
('Pam', 'John')
('Phil', 'Lisa')
('Phil', 'Pam')
('Phil', 'John')
('John', 'Lisa')
('John', 'Pam')
('John', 'Phil')
Siparişin alakasız olduğu benzersiz çiftler :
list_of_pairs = [(people[p1], people[p2]) for p1 in range(len(people)) for p2 in range(p1+1,len(people))]
Sonuç:
('Lisa', 'Pam')
('Lisa', 'Phil')
('Lisa', 'John')
('Pam', 'Phil')
('Pam', 'John')
('Phil', 'John')
Düzenleme: Bu çözümü basitleştirmek için yeniden çalıştıktan sonra, Adam Rosenfield ile aynı yaklaşım olduğunu fark ettim. Umarım daha büyük açıklama bazılarının onu daha iyi anlamasına yardımcı olur.